Bagaimana saya bisa mengkonfigurasi Logback untuk mencatat level yang berbeda untuk pencatat ke tujuan yang berbeda?
Misalnya, dengan diberikan konfigurasi Logback berikut, Logback akan merekam INFO
pesan STDOUT
dan ERROR
pesanSTDERR
?
(Perhatikan bahwa contoh ini adalah variasi dari contoh yang logback-examples/src/main/java/chapters/configuration/sample4.xml
ditunjukkan pada Bab 3: Konfigurasi Logback ).
<configuration>
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="STDERR"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
<target>System.err</target>
</appender>
<!-- What is the effective level of "chapters.configuration"? -->
<logger name="chapters.configuration" level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<logger name="chapters.configuration" level="ERROR" additivity="false">
<appender-ref ref="STDERR" />
</logger>
<!-- turn OFF all logging (children can override) -->
<root level="OFF">
<appender-ref ref="STDOUT" />
</root>
</configuration>
levels are ordered as follows: TRACE < DEBUG < INFO < WARN < ERROR.
Jawaban:
Pembaruan: Untuk semua pendekatan berbasis konfigurasi menggunakan Groovy lihat jawaban Dean Hiller .
-
Anda dapat melakukan beberapa hal menarik dengan filter Logback . Konfigurasi di bawah ini hanya akan mencetak pesan peringatan dan pesan kesalahan ke stderr, dan semua yang lainnya untuk stdout.
logback.xml
com.foo.StdOutFilter
com.foo.ErrOutFilter
sumber
Saya percaya ini akan menjadi solusi paling sederhana:
sumber
ThresholdFilter
s sebagai gantinya.<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
apa peran sebenarnya dari menentukan<root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="STDERR" /> </root>
di logback.xml?<onMatch>
dan<onMismatch>
tidak ditentukan untukThresholdFilter
. Cukup hapus dan itu akan berfungsi sebagaimana dimaksud.Solusi berdasarkan konfigurasi saja , dengan ThresoldFilter dan LevelFilters untuk membuat hal - hal yang benar-benar sederhana untuk dipahami :
sumber
ThresoldFilter
.ThresoldFilter
STDOUT, alih-alih menggunakan limaLevelFilter
?oke, inilah cara xml favorit saya untuk melakukannya. Saya melakukan ini untuk versi gerhana sehingga saya bisa
dan untuk beberapa alasan SO tidak menunjukkan semua ini dengan baik tetapi sebagian besar tampaknya ada di sana ...
sumber
logback.groovy
versi garis tampilan ini?Solusi paling sederhana adalah digunakan
ThresholdFilter
pada appenders:Contoh lengkap:
Pembaruan: Seperti yang ditunjukkan Mike dalam komentar, pesan dengan tingkat ERROR dicetak di sini untuk STDOUT dan STDERR. Namun, tidak yakin apa maksud OP. Anda dapat mencoba jawaban Mike jika ini bukan yang Anda inginkan.
sumber
Ini adalah konfigurasi yang saya gunakan, yang berfungsi dengan baik, didasarkan pada XML + JaninoEventEvaluator (mengharuskan perpustakaan Janino ditambahkan ke Classpath)
sumber
Saya menggunakan logback.groovy untuk mengkonfigurasi logback saya, tetapi Anda juga dapat melakukannya dengan xml config:
Saya pikir menggunakan GEventEvaluator lebih sederhana karena tidak perlu membuat kelas filter.
Saya minta maaf untuk bahasa Inggris saya!
sumber
Coba ini. Anda cukup menggunakan built-in
ThresholdFilter
danLevelFilter
. Tidak perlu membuat filter sendiri secara terprogram. Dalam contoh ini tingkat PERINGATAN dan KESALAHAN dicatat ke System.err dan sisanya ke System.out:sumber
Saya tidak menghargai jawaban ini, karena ini hanya kombinasi dari dua jawaban terbaik di atas: X. Wo Satuk dan Sébastien Helbert:
ThresholdFilter
bagus tetapi Anda tidak dapat mengonfigurasinya untuk memiliki level atas dan juga level lebih rendah *, tetapi menggabungkannya dengan duaLevelFilters
set ke "DENY"WARN
danERROR
bekerja dengan baik.Sangat penting : jangan lupa
<target>System.err</target>
tag di append STDERR: kelalaian saya membuat saya frustrasi selama beberapa menit.* Namun ia memiliki metode
decide
dalam API tetapi saya tidak tahu bagaimana Anda akan menggunakannya dalam konteks ini.sumber
Tidak diperlukan pemrograman. konfigurasi membuat hidup Anda mudah.
Di bawah ini adalah konfigurasi yang mencatat level log yang berbeda ke file yang berbeda
sumber
sumber
Contoh cara menampilkan pesan berwarna level "INFO" atau lebih tinggi ke konsol dan pesan level "PERINGATAN" atau lebih tinggi ke file .
File logback.xml Anda :
sumber