Membuat Appender Log4j2 Kustom

1. Perkenalan

Dalam tutorial ini, kita akan belajar tentang membuat appender Log4j2 kustom. Jika Anda mencari pengantar Log4j2, lihat artikel ini.

Log4j2 dilengkapi dengan banyak appenders bawaan yang dapat digunakan untuk berbagai tujuan seperti masuk ke file, ke database, ke soket, atau ke database NoSQL.

Namun, mungkin ada kebutuhan untuk appender khusus bergantung pada permintaan aplikasi.

Log4j2 adalah versi Log4j yang ditingkatkan dan memiliki peningkatan yang signifikan dibandingkan Log4j. Karenanya, kami akan menggunakan kerangka kerja Log4j2 untuk mendemonstrasikan pembuatan appender khusus.

2. Pengaturan Maven

Kami akan membutuhkan ketergantungan log4j-core di pom.xml kami untuk memulai dengan:

 org.apache.logging.log4j log4j-core 2.11.0 

Versi terbaru log4j-core dapat ditemukan di sini.

3. Penambah Kustom

Ada dua cara untuk mengimplementasikan appender kustom kita. Pertama dengan mengimplementasikan antarmuka Appender dan yang kedua adalah dengan memperluas kelas AbstractAppender . Metode kedua menyediakan cara sederhana untuk mengimplementasikan appender kustom kita sendiri dan itulah yang akan kita gunakan.

Untuk contoh ini, kami akan membuat MapAppender . Kami akan merekam peristiwa log dan menyimpannya di HashMap Bersamaan dengan stempel waktu untuk kuncinya.

Inilah cara kami membuat MapAppender:

@Plugin( name = "MapAppender", category = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE) public class MapAppender extends AbstractAppender { private ConcurrentMap eventMap = new ConcurrentHashMap(); protected MapAppender(String name, Filter filter) { super(name, filter, null); } @PluginFactory public static MapAppender createAppender( @PluginAttribute("name") String name, @PluginElement("Filter") Filter filter) { return new MapAppender(name, filter); } @Override public void append(LogEvent event) { eventMap.put(Instant.now().toString(), event); } }

Kami telah membuat anotasi kelas dengan anotasi @Plugin yang menunjukkan bahwa appender kami adalah sebuah plugin.

The nama plugin menandakan nama kami akan menyediakan dalam konfigurasi untuk menggunakan appender ini. The kategori menetapkan bahwa kategori di mana kita menempatkan plugin. The elementType adalah appender.

Kami juga membutuhkan metode pabrik yang akan membuat appender. Metode createAppender kami melayani tujuan ini dan dianotasi dengan anotasi @PluginFactory .

Di sini, kami menginisialisasi appender kami dengan memanggil konstruktor yang dilindungi dan kami meneruskan tata letak sebagai null karena kami tidak akan menyediakan tata letak apa pun di file konfigurasi dan kami mengharapkan kerangka kerja untuk menyelesaikan tata letak default.

Selanjutnya, kita telah mengganti metode append yang memiliki logika sebenarnya untuk menangani LogEvent . Dalam kasus kami, metode append menempatkan LogEvent ke eventMap kami .

4. Konfigurasi

Sekarang kita memiliki MapAppender di tempatnya, kita membutuhkan file konfigurasi lo4j2.xml untuk menggunakan appender ini untuk logging kita.

Inilah cara kami mendefinisikan bagian konfigurasi di file log4j2.xml kami :

Perhatikan bahwa atribut packages harus merujuk pada paket yang berisi appender kustom Anda.

Selanjutnya, di bagian appender kami, kami mendefinisikan appender. Berikut adalah cara kami menambahkan appender kustom kami ke daftar appender di konfigurasi:

Bagian terakhir adalah menggunakan appender di bagian Logger kami. Untuk implementasi kami, kami menggunakan MapAppender sebagai root logger dan mendefinisikannya di bagian root.

Begini caranya:

5. Penanganan Error

Untuk menangani error saat mencatat event kita bisa menggunakan metode error yang diwarisi dari AbstractAppender.

Misalnya, jika kita tidak ingin mencatat peristiwa yang tingkat lognya kurang dari WARN.

Kita dapat menggunakan metode kesalahan AbstractAppender untuk mencatat pesan kesalahan. Inilah cara melakukannya di kelas kami:

public void append(LogEvent event) { if (event.getLevel().isLessSpecificThan(Level.WARN)) { error("Unable to log less than WARN level."); return; } eventMap.put(Instant.now().toString(), event); }

Amati bagaimana metode penambahan kami telah berubah sekarang. Kami memeriksa level acara apakah lebih besar dari WARN dan kami kembali lebih awal jika nilainya kurang dari WARN .

6. Kesimpulan

Di artikel ini, kami telah melihat cara mengimplementasikan appender kustom untuk Log4j2.

Meskipun ada banyak cara built-in untuk mencatat data kami dengan menggunakan appender yang disediakan Log4j2, kami juga memiliki alat dalam kerangka kerja ini yang memungkinkan kami untuk membuat appender kami sendiri sesuai kebutuhan aplikasi kami.

Seperti biasa, contohnya dapat ditemukan di Github.