Pertanyaan Setel tingkat log log4j


Saat ini saya sedang mengerjakan proyek yang menggunakan log4j. Saya menjalankan testcase (junit) dan ingin mengatur tingkat log untuk dilacak sehingga saya dapat melihat apakah semua nilai sudah benar. Kelas yang menggunakan penebangan di proyek mengandung baris seperti berikut:

private static final Log LOG = LogFactory.getLog(MatchTaskTest.class);

dan gunakan semacam ini untuk melakukan debugging yang sebenarnya

LOG.trace("value");

Saya tidak pernah menggunakan log4j sebelumnya, apakah ada yang tahu bagaimana saya dapat mengubah tingkat log hanya untuk testcase, sebaiknya hanya dengan mendefinisikan parameter dalam dialog konfigurasi run gerhana.


19
2018-05-17 23:09


asal


Jawaban:


Menggunakan file konfigurasi lain

Mungkin Anda bisa menunjuk ke file konfigurasi lain.

java -Dlog4j.configuration=config file yourApp

Dimana:

  • config, file konfigurasi Anda, mis. log4j.properties  atau log4j.xml.
  • file, file log, mis. myApp.log
  • yourApp, aplikasi Anda, mis. MyAppGUI

Atau Anda bisa menggunakan kelas

java -Dlog4j.configurationClass=config class yourApp

Dimana:

  • config, file konfigurasi Anda, mis. log4j.properties atau log4j.xml.
  • class, setiap kelas inisialisasi khusus, seperti LogManager, harus diimplementasikan itu org.apache.log4j.spi.Configurator
  • yourApp, aplikasi Anda, mis. MyAppGUI

Anda dapat melihat lebih banyak di Apache log4j 1.2 - Pengenalan singkat ke log4j di Prosedur Inisialisasi Default bagian.

Ubah level secara terprogram

Selain itu, Anda juga dapat menggunakan metode yang menawarkan Logger kelas, seperti public void setLevel(Level level), misalnya:

Logger.getRootLogger().setLevel(Level.TRACE);

Karena Anda hanya menginginkan untuk tujuan pengujian, Anda dapat menggunakannya. Tetapi disarankan untuk tidak menggunakan dalam kode klien karena mereka menimpa parameter konfigurasi default dalam kode keras. Cara terbaik adalah menggunakan file konfigurasi eksternal.


13
2018-05-17 23:35



Di kelas junit Anda letakkan:

Logger.getRootLogger().setLevel(Level.TRACE);

suatu tempat sebelum pelaksanaan metode yang diuji. Ini akan mengatur level ambang dari root logger ke TRACE.


19
2018-05-17 23:38



Jika Anda menggunakan Maven, Anda dapat memiliki dua file konfigurasi log4j:

  • satu di src / main / resources, berisi konfigurasi logging produksi Anda
  • satu di src / test / sumber daya, berisi konfigurasi pencatatan waktu pengujian Anda

Maven secara otomatis akan menggunakan yang terakhir pada waktu tes, dan menggabungkan yang pertama ke dalam artefak Anda (JAR, WAR, dll) sehingga digunakan dalam produksi. Anda tidak perlu dipusingkan dengan switch baris perintah atau apa pun.


2
2017-11-07 02:07



Saya tidak berpikir ini mungkin.

File konfigurasi akan membiarkan Anda mengonfigurasi pesan log apa yang sebenarnya muncul di log, bukan level berapa setiap pesan akan masuk. Ini masuk akal - konfigurasi tidak mempengaruhi tingkat pesan.

Itu javadoc memiliki metode untuk setiap tingkat log dan metode log umum, yang mengambil prioritas, jadi saya tidak yakin bahkan ada default yang harus diatur.

Anda dapat mengatur file konfigurasi secara eksplisit pada baris perintah melalui -Dlog4j.configuration=<FILE_PATH>, sehingga Anda dapat menyiapkan konfigurasi khusus untuk kasus uji tersebut.


0
2018-05-17 23:18



Saya tidak tahu mengapa beberapa hal di atas tidak berhasil untuk saya. (Saya tidak ingin menulis file konfigurasi). mengikuti bekerja untuk saya

Logger log1 = Deencapsulation.getField(Some.class,"logger");
log1.setLevel(Level.DEBUG);

-1
2017-12-22 12:44



Saya benar-benar memasukkannya ke dalam metode @Before. Tapi saya yakin itu bisa (dan seharusnya) ditempatkan di @BeforeClass.

Jika Anda mengaturnya di tubuh kelas Anda akan mendapatkan kesalahan kompilator.


-2
2018-05-15 22:18