Ini sepertinya kesalahan kelalaian, tetapi sepertinya saya tidak dapat menemukan penyebabnya. Logging dengan logback / slf4j (versi terbaru slf4j-api-1.6.1, logback core / classic 0.9.24). Konfigurasi log paling sederhana untuk pengujian adalah:
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<!-- DONT USE THIS FORMATTER FOR LIVE LOGGING THE %L LINE NUMBER OUTPUTTER IS SLOW -->
<pattern>%le %-1r [%c{1}:%L] %m%n</pattern>
</layout>
</appender>
<root level="DEBUG">
<appender-ref ref="stdout" />
</root>
</configuration>
Setiap pengaturan log dimulai dengan jalur status internal logback:
11:21:27,825 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
11:21:27,826 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:.../logback-test.xml]
11:21:28,116 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
11:21:28,124 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
11:21:28,129 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [stdout]
11:21:28,180 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Pushing component [layout] on top of the object stack.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - This appender no longer admits a layout as a sub-component, set an encoder instead.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
11:21:28,207 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
11:21:28,207 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [stdout] to Logger[ROOT]
yang, menurut dokumen, format logback digunakan untuk default. Kemudian selesai membaca konfigurasi (yang diatur untuk menghasilkan format yang berbeda) dan melanjutkan dengan output yang diformat dengan benar. Ada parameter konfigurasi <configuration debug="false">
yang tidak memengaruhi ini.
Adakah yang tahu cara mematikan ini?
Jawaban:
Jika Anda mengatur
debug
atributconfiguration
elemen ketrue
, Anda akan mendapatkan semua informasi status ke konsol. Jika ini masalah Anda, cukup setel ke false atau hapus.Jika Anda memiliki masalah konfigurasi level
WARN
atau di atas, Anda juga akan mendapatkan semua informasi status dicatat ke konsol (termasuk pesan levelINFO
). Solusi terbaik untuk masalah ini adalah memperbaiki masalah (dalam kasus Anda ganti<layout>
elemen dengan<encoder>
elemen).Jika Anda karena suatu alasan tidak dapat memperbaiki masalah, tetapi ingin menghapus status-informasi dari konsol, Anda dapat mengkonfigurasi alternatif
StatusListener
. GunakanNopStatusListener
untuk sepenuhnya menghapus informasi status:sumber
INFO
pesan-pesan log akan hilang juga, tetapi kenyataannya memang demikian. Saya tahu jawabannya mengatakan ini, tetapi untuk beberapa alasan tidak jelas bagi saya. Agar sangat jelas: perbaiki masalah enkoder / tata letak dan pesan peringatan tidak hanya akan hilang, tetapi pesan info juga akan hilang, meskipun tidak terkait dengan masalah tersebut.Seperti dijelaskan dalam dokumen , jika peringatan atau kesalahan terjadi selama parsing file konfigurasi, logback akan secara otomatis mencetak data status pada konsol.
Mengikuti http://logback.qos.ch/codes.html#layoutInsteadOfEncoder yaitu tautan yang disebutkan oleh logback dalam pesan peringatannya. Setelah Anda mengikuti langkah-langkah yang disebutkan di dalamnya, yaitu, jika Anda mengganti elemen <layout> dengan <encoder>, logback akan berhenti mencetak pesan di konsol.
sumber
debug="true"
atribut dalamconfiguration
elemenlogback.xml
. Tolong sebutkan ini untuk kepentingan orang lain yang jatuh ke dalam lubang ini!Jawaban ceki benar:
Setelah Anda melakukannya dengan benar, tidak akan ada lagi polusi di baris pertama log Anda.
Pada Maret 2015, di Logback 1.1.2 , Anda perlu menggunakan
<encoder>
sub-komponen -<layout>
sekarang tidak digunakan lagi dan jika menggunakannya, pesan kesalahan akan muncul. Anda tidak dapat mengontrol ini, itu perilaku default Logback .Beberapa kelas internal telah diganti namanya juga, dan bahkan contoh-contoh di halaman manualnya sudah usang!
Berikut ini cuplikan kode dari halaman Bantuan Kode Kesalahan mereka , yang memiliki cara yang benar untuk mengonfigurasi logger. Ini memperbaiki masalah sepenuhnya dalam proyek saya. http://logback.qos.ch/codes.html#layoutInsteadOfEncoder
sumber
Saya menyadari Steve menemukan perbaikannya tetapi dia tidak menyebutkannya di utasnya. Jika ada orang lain yang mengalami masalah yang sama di sini adalah perbaikannya.
Ganti elemen "<layout>" dengan "<encoder> .. </encoder>"
Penyebabnya adalah: <layout class = "ch.qos.logback.classic.PatternLayout">
sumber
Berjuang dengan masalah yang sama sendiri yaitu ada banyak baris login tepat di awal yang tidak terkait dengan kode saya. Inilah cara saya memperbaikinya.
Ini berjalan dengan entri berikut di pom.xml
sumber
Ini sepertinya diperbaiki di 0.9.29. Baru saja membuat beberapa tes. Tidak ada INFO Joran lagi. Saya kira ini adalah komitmen perbaikan.
sumber
Saya memiliki masalah yang sama saya menambahkan baris ini
di logback dan berhasil
sumber
Saya sudah mencoba segalanya dan tidak ada yang berhasil untuk saya. Masalah saya adalah karena beberapa file logback.xml di classpath saya. Ini adalah kasus umum dalam proyek multi modular. Ketika hanya ada satu file logback.xml di classpath, tidak ada ambiguitas dan masalahnya terpecahkan.
sumber
Menggunakan
logback.groovy
:statusListener(NopStatusListener)
(disrc/test/resources/logback.groovy
) berfungsi.(Kasus penggunaan yang valid adalah misalnya jika bekerja dengan ANT di Eclipse, menggunakan logback logging, kelas groovy dan tes unit di mana tes unit mengambil
src/test/resources/logback.groovy
, tetapi juga akan melihatsrc/main/resources/logback.groovy
(atau serupa) Anda tidak dapat mengecualikan (jika classpath ANT dikatakan menggunakan proyek classpath).)sumber
Saya lebih suka menggunakan pendengar status untuk mematikan log logback sendiri:
Tetapi seperti yang disebutkan NopStatusListener juga mencegah menampilkan peringatan dan kesalahan. Jadi Anda dapat menulis pendengar status khusus Anda dan mengubah level log untuk itu secara manual:
Kemudian gunakan dalam file logback.xml Anda:
sumber