Apa penanda dalam kerangka kerja Java Logging dan apa alasan untuk menggunakannya?

110

Pertama kali saya mendengar tentang penanda ketika membaca:

http://slf4j.org/faq.html

Saya memeriksa metode yang tersedia untuk objek Logger :

dan menemukan antarmuka:

Info lebih mendalam saya dapatkan dari:

tapi masih bingung ... Perhatikan bahwa saya bertanya mengapa , bukan bagaimana menggunakannya, jadi ini bukan duplikat dari:

UPDATE Tampaknya ketika Anda menggunakan marker, Anda juga diminta untuk menulis kode Java kustom sebagai gantinya melakukan konfigurasi di file XML atau .property ...

UPDATE 2 Dari http://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator

Marker notifyAdmin = MarkerFactory.getMarker("NOTIFY_ADMIN");
logger.error(notifyAdmin,
  "This is a serious an error requiring the admin's attention",
   new Exception("Just testing"));
gavenkoa.dll
sumber
Untuk menggunakan penanda, Anda perlu menggunakan API penanda yang disediakan oleh SLF4J. Itukah yang Anda maksud dengan "kode Java khusus"?
Ceki
@Ceki Tampaknya hanya menggunakan Logger.warn (Marker, msg) tidak memberi Anda manfaat apa pun sampai Anda menulis kelas khusus untuk filter dan mendaftarkannya ... Sintaks biasa dari logback.xml tidak memiliki kemampuan khusus untuk bekerja dengan Marker (hanya mencetaknya dengan penanda% )
gavenkoa
1
Apa yang menemukan "khusus" dalam apa yang disajikan di logback.qos.ch/manual/appenders.html#OnMarkerEvaluator ?
Ceki
@Ceki Terima kasih atas poinnya! Apakah hanya satu tempat di mana penanda dapat digunakan?
gavenkoa
1
@Ceki Sekarang kami menggunakan Elasticsearch, itulah cara untuk menandai acara khusus. Kami menyimpan penanda yang telah ditentukan di kelas khusus untuk digunakan kembali. Itu tidak jelas ketika Anda hanya menggunakan greplog teks.
gavenkoa

Jawaban:

117

Ini adalah versi ulangan jawaban saya atas pertanyaan " Praktik terbaik untuk menggunakan Penanda di SLF4J / Logback ".

Marker dapat digunakan untuk mewarnai atau menandai satu pernyataan log. Apa yang Anda lakukan dengan warna-warna ini, yaitu penanda, sepenuhnya terserah Anda. Namun, dua pola tampaknya umum untuk penggunaan penanda.

  1. Memicu : Beberapa appender dapat diinstruksikan untuk melakukan tindakan di hadapan penanda tertentu. Misalnya, SMTPAppenderdapat dikonfigurasi untuk mengirim email setiap kali peristiwa logging ditandai dengan NOTIFY_ADMINpenanda terlepas dari tingkat log. Lihat pemicuan berbasis penanda di dokumentasi logback. Anda juga dapat menggabungkan level log dan penanda untuk memicu.

  2. Pemfilteran : Penanda sangat berguna untuk menonjolkan pernyataan log berharga tertentu. Misalnya, Anda dapat mewarnai / menandai semua log terkait persistensi Anda (dalam berbagai dan beberapa file kelas) dengan warna "DB". Anda kemudian dapat memfilter "DB": menonaktifkan logging kecuali pernyataan log yang ditandai dengan DB. Lihat bab tentang filter dalam dokumentasi logback untuk informasi lebih lanjut (cari MarkerFilter). Perhatikan bahwa pemfilteran pada penanda dapat dilakukan tidak hanya dengan logback tetapi juga alat analisis log.

Sebelum munculnya Penanda, untuk mencapai perilaku serupa, Anda memiliki opsi 1) menggunakan tingkat khusus 2) menggunakan nama pencatat yang dimodifikasi. SLF4J API saat ini tidak mendukung level kustom. Adapun opsi 2, nama pencatat akhiran (atau awalan) dapat diterapkan jika satu atau dua pencatat perlu dimodifikasi. Pendekatan ini menjadi tidak praktis segera setelah 3 atau lebih penebang harus "disub-klasifikasikan" karena file konfigurasi terkait menjadi tidak dapat diatur.

Meskipun satu penanda sudah sangat berguna, versi SLF4J berikutnya, yaitu versi 2.0, akan memungkinkan beberapa penanda per pernyataan log.

Ceki
sumber
1
Juga dapat digunakan di SiftingAppender untuk discrimnator stackoverflow.com/a/30552012/1012497
nikli