konfigurasi log4j via argumen JVM?


133

Variabel apa yang harus saya tetapkan / lewati sebagai argumen untuk JVM agar log4j dapat berjalan dengan baik? Dan dengan benar saya maksud tidak mengeluh dan mencetak ke konsol. Bisakah saya melihat contoh khas?

Catatan: Saya perlu menghindari membuat file log4j.properties dalam aplikasi.


2
Waspadai pembaca: penting untuk memperhatikan bahwa pertanyaannya adalah menanyakan tentang log4j, bukan log4j2.
neves

Jawaban:


161

Apakah Anda memiliki file konfigurasi log4j? Referensi saja menggunakan

-Dlog4j.configuration={path to file}

di mana {path to file} harus diawali dengan file:

Sunting: Jika Anda bekerja dengan log4j2, Anda harus menggunakan

-Dlog4j.configurationFile={path to file}

Diambil dari jawaban https://stackoverflow.com/a/34001970/552525


Brian - tidak persis apa yang saya cari, tapi saya pikir itu adalah kompromi yang layak antara memindahkan file ke aplikasi saya dan mengatur properti melalui JVM args.
jconlin

Saya pikir ketika aplikasi Anda menjadi lebih kompleks (jika mau) maka file menjadi lebih mudah dikelola ketika Anda mengkonfigurasinya lebih. Namun saya akui saya menduga Anda menggunakan case di sini.
Brian Agnew

25
{path to file}perlu didahulukan dengan file:agar ini berfungsi.
ATAU Mapper

2
@ORMapper - Saya telah mengubah secara tepat
Brian Agnew

6
Hati-hati jika menggunakan Log4j 2 karena nama properti dan sintaks berubah. Lihat jawaban ini .
José Andias

161

Solusinya menggunakan argumen JVM berikut:

-Dlog4j.configuration={path to file}

Jika file BUKAN di classpath ( WEB-INF/classesdalam kasus Tomcat) tetapi di suatu tempat pada disk Anda, gunakan file:, seperti

-Dlog4j.configuration=file:C:\Users\me\log4j.xml

Informasi dan contoh lebih lanjut di sini: http://logging.apache.org/log4j/1.2/manual.html


2
Untuk Logback:-Dlogback.configurationFile=C:\logback-test.xml
30

2
+1 untuk menyebutkan file (mengulangi apa yang dikatakan Tim. Ini telah membuat saya gila dengan log4j beberapa kali.
javadba

13
Argumen JVM lain yang sangat berguna untuk men-debug konfigurasi log4j:-Dlog4j.debug
KC

2
Apakah mungkin menggunakan jalur relatif dengan metode ini?
AaA

33

Ini tampaknya telah berubah (mungkin dengan log4j2) menjadi:

-Dlog4j.configurationFile=file:C:\Users\me\log4j.xml

Lihat: https://logging.apache.org/log4j/2.x/manual/configuration.html


Ini memberi saya pengecualian berikut. C: \ Development \ Eclipses \ EclipseMars \ file: C: \ Users \ ABC \ log4j2.xml Bagaimana cara membuat path menjadi absolut
Cybermonk

Untuk Wadah Docker, saya menggunakan JAVA_PARAMS="-Dlog4j.configurationFile=classpath:log4j2-container.xml"jika Docker Image mendukung mengesampingkan JAVA_PARAMS dengan env vars dan file berada di dalam Jar.
Marcello de Sales

21

Saya tahu ini sudah dijawab, tetapi karena Anda mengatakan, ini bukan apa yang Anda cari, saya ingin menunjukkan alternatif berikut:

Anda juga dapat menggunakan kelas konfigurasi alih-alih properti atau file xml.

-Dlog4j.configuratorClass=com.foo.BarConfigurator

Lihat http://logging.apache.org/log4j/1.2/manual.html untuk detailnya.


1
Ini adalah solusi yang tepat jika seseorang ingin menghindari membuat file konfigurasi. Di dalam kelas Configurator kustom Anda sendiri, Anda dapat memanggil BasicConfigurator (), atau membuat Loggers dan Appenders Anda sendiri sesuai keinginan Anda. Tapi saya lebih suka file konfigurasi!
skiphoppy

11

Secara umum, selama file log4j.properties Anda ada di classpath, Log4j seharusnya secara otomatis mengambilnya di startup JVM.


1
Ini benar: -Dlog4j.configuration hanya diperlukan jika file tidak ada di classpath atau jika Anda ingin menggunakan file yang bukan yang pertama ditemukan di classpath
javadba

8

Terlambat ke pesta sejak 2015, Log4J 1.x telah mencapai EOL .

Log4J 2.x dan seterusnya opsi JVM seharusnya-Dlog4j.configurationFile=<filename>


PS <filename>bisa menjadi sebuah file relatif terhadap jalur kelas tanpa itu file:seperti yang disarankan dalam jawaban lainnya.


2
Jawaban penting, karena jawaban lain tidak lagi valid.
Yossale

1

Jalur Relatif juga ok:

java -Dlog4j.configuration=file:".\log4j.properties" -jar com.your-1.0-SNAPSHOT.jar

atau

java -Dlog4j.configuration=file:".\log4j.xml" -jar com.your-1.0-SNAPSHOT.jar

0

Jika Anda menggunakan gradle. Anda dapat menerapkan plugin 'aplikasi' dan menggunakan perintah berikut

  applicationDefaultJvmArgs = [
             "-Dlog4j.configurationFile=your.xml",
                              ]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.