Membuat Append Log4j2 Custom

1. Pengenalan

Dalam tutorial ini, kita akan belajar tentang membuat appender Log4j2 tersuai. Sekiranya anda mencari pengenalan kepada Log4j2, sila lihat artikel ini.

Log4j2 dihantar dengan banyak pelengkap bawaan yang dapat digunakan untuk berbagai tujuan seperti log ke file, ke pangkalan data, ke soket atau ke pangkalan data NoSQL.

Namun, mungkin ada kebutuhan untuk pelamar khusus tergantung pada permintaan aplikasi.

Log4j2 adalah versi Log4j yang ditingkatkan dan mempunyai peningkatan yang ketara berbanding Log4j. Oleh itu, kami akan menggunakan kerangka kerja Log4j2 untuk menunjukkan penciptaan aplikasi tambahan.

2. Persediaan Maven

Kami memerlukan kebergantungan teras log4j di pom.xml kami untuk bermula dengan:

 org.apache.logging.log4j log4j-core 2.11.0 

Log4j-core versi terkini boleh didapati di sini.

3. Penambah Kustom

Terdapat dua cara untuk menerapkan pelengkap khusus kami. Pertama adalah dengan melaksanakan antara muka Appender dan yang kedua adalah dengan memperluas kelas AbstractAppender . Kaedah kedua menyediakan kaedah mudah untuk melaksanakan appender khas kita sendiri dan itulah yang akan kita gunakan.

Untuk contoh ini, kita akan membuat MapAppender . Kami akan menangkap peristiwa log dan menyimpannya dalam Peta serentak bersama dengan cap waktu untuk kunci.

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 memberi penjelasan kelas dengan anotasi @Plugin yang menunjukkan bahawa pelamar kami adalah pemalam.

Yang nama plugin menandakan nama yang kami akan menyediakan dalam konfigurasi untuk menggunakan appender ini. The kategori menyatakan bahawa kategori di mana kita meletakkan plugin. Jenis Elemen adalah pelengkap.

Kami juga memerlukan kaedah kilang yang akan membuat pelengkap. Kaedah createAppender kami memenuhi tujuan ini dan dijelaskan dengan anotasi @PluginFactory .

Di sini, kami menginisialisasi appender kami dengan memanggil konstruktor yang dilindungi dan kami menyusun tata letak sebagai nol kerana kami tidak akan memberikan susun atur dalam fail konfigurasi dan kami mengharapkan kerangka kerja untuk menyelesaikan tata letak lalai.

Seterusnya, kami telah diatasi yang tambah kaedah yang mempunyai logik sebenar mengendalikan LogEvent . Dalam kes kami, kaedah append memasukkan LogEvent ke dalam eventMap kami .

4. Konfigurasi

Sekarang kita telah menyediakan MapAppender kita, kita memerlukan fail konfigurasi lo4j2.xml untuk menggunakan appender ini untuk log kita.

Inilah cara kami menentukan bahagian konfigurasi dalam fail log4j2.xml kami :

Perhatikan bahawa atribut paket harus merujuk pada paket yang berisi appender khusus anda.

Seterusnya, di bahagian pelengkap kami, kami menentukan pelengkap. Berikut adalah cara kita menambahkan appender khas kita ke dalam senarai appenders dalam konfigurasi:

Bahagian terakhir adalah menggunakan pelekat di bahagian Pembalak kami. Untuk pelaksanaan kami, kami menggunakan MapAppender sebagai root logger dan menentukannya di bahagian root.

Begini caranya:

5. Ralat Mengendalikan

Untuk menangani kesilapan semasa mencatat peristiwa, kita dapat menggunakan kaedah kesalahan yang diwarisi dari AbstractAppender.

Sebagai contoh, jika kita tidak mahu mencatat peristiwa yang mempunyai tahap log kurang daripada yang WARN.

Kita boleh menggunakan kaedah kesalahan AbstractAppender untuk mencatat mesej ralat. Begini caranya 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); }

Perhatikan bagaimana kaedah lampiran kami telah berubah sekarang. Kami memeriksa tahap acara untuk lebih besar daripada WARN dan kami kembali lebih awal jika ada yang kurang dari WARN .

6. Kesimpulannya

Dalam artikel ini, kami telah melihat bagaimana menerapkan appender khusus untuk Log4j2.

Walaupun terdapat banyak cara bawaan untuk mencatat data kami dengan menggunakan pelengkap yang disediakan oleh Log4j2, kami juga memiliki alat dalam kerangka ini yang memungkinkan kami membuat pelengkap kami sendiri sesuai dengan keperluan aplikasi kami.

Seperti biasa, contohnya boleh didapati di Github.