Saya tertarik untuk mengubah level log secara terprogram di Log4j2. Saya mencoba melihat dokumentasi konfigurasi mereka tetapi sepertinya tidak ada apa-apa. Saya juga mencoba mencari di dalam paket:, org.apache.logging.log4j.core.config
tetapi tidak ada yang tampak membantu juga.
109
Jawaban:
DIEDIT menurut FAQ log4j2 versi 2.4
Anda dapat mengatur level logger dengan kelas Configurator dari Log4j Core. TAPI ketahuilah bahwa kelas Configurator bukan bagian dari API publik.
Sumber
DIEDIT untuk mencerminkan perubahan dalam API yang diperkenalkan di Log4j2 versi 2.0.2
Jika Anda ingin mengubah level root logger, lakukan sesuatu seperti ini:
Berikut adalah javadoc untuk LoggerConfig.
sumber
Jawaban yang diterima oleh @slaadvak tidak berhasil untuk saya untuk Log4j2 2.8.2 . Berikut ini lakukan.
Untuk mengubah log
Level
secara universal gunakan:Untuk mengubah log
Level
hanya untuk kelas saat ini, gunakan:sumber
Jika Anda ingin mengubah satu tingkat pencatat tertentu (bukan pencatat akar atau pencatat yang dikonfigurasi dalam file konfigurasi), Anda dapat melakukan ini:
sumber
setLevel(logger, Level.ERROR);
dan pernyataan logger.debug masih dicetak. File log4j2.xml saya ada di pastebin.com/fcbV2mTWSaya menemukan jawaban yang bagus di sini: https://garygregory.wordpress.com/2016/01/11/changing-log-levels-in-log4j2/
Anda dapat menggunakan org.apache.logging.log4j.core.config.Configurator untuk menyetel tingkat logger tertentu.
sumber
Pendekatan terprogram agak mengganggu. Mungkin Anda harus memeriksa dukungan JMX yang diberikan oleh Log4J2:
Aktifkan port JMX di aplikasi Anda saat memulai:
-Dcom.sun.management.jmxremote.port = [port_num]
Gunakan salah satu klien JMX yang tersedia (JVM menyediakannya di JAVA_HOME / bin / jconsole.exe) saat menjalankan aplikasi Anda.
Di JConsole, cari kacang "org.apache.logging.log4j2.Loggers"
Terakhir, ubah level logger Anda
Hal yang paling saya sukai dari ini adalah Anda tidak perlu mengubah kode atau konfigurasi untuk mengelola ini. Semuanya eksternal dan transparan.
Info selengkapnya: http://logging.apache.org/log4j/2.x/manual/jmx.html
sumber
Sebagian besar jawaban secara default mengasumsikan bahwa logging harus bersifat aditif. Tetapi katakanlah bahwa beberapa paket menghasilkan banyak log dan Anda ingin menonaktifkan logging hanya untuk logger tersebut. Berikut adalah kode yang saya gunakan untuk membuatnya berfungsi
Kasus uji untuk hal yang sama
Dengan asumsi log4j2.xml berikut ada di classpath
sumber
Salah satu cara tidak biasa yang saya lakukan adalah membuat dua file terpisah dengan tingkat logging berbeda.
Sebagai contoh. log4j2.xml dan log4j-debug.xml Sekarang ubah konfigurasi dari file ini.
Kode sampel:
sumber