JVM bağımsız değişken (ler) i aracılığıyla log4j yapılandırması?


133

Log4j'nin düzgün çalışmasını sağlamak için hangi değişkenleri JVM'ye bağımsız değişken olarak ayarlamalı / iletmeliyim? Ve düzgün derken şikayet etmemeyi ve konsola yazdırmamayı kastediyorum. Tipik bir örnek görebilir miyim?

Not: Uygulamada log4j.properties dosyası oluşturmaktan kaçınmam gerekiyor.


2
Okuyucu dikkat: Sorunun log4j2 ile değil, log4j ile ilgili olduğunu fark etmek önemlidir.
neves

Yanıtlar:


161

Log4j yapılandırma dosyanız var mı? Sadece şunu kullanarak referans verin

-Dlog4j.configuration={path to file}

nerede {dosyanın yolu} önekinin getirilmesi gerekir file:

Düzenleme: log4j2 ile çalışıyorsanız, kullanmanız gerekir

-Dlog4j.configurationFile={path to file}

Cevap https://stackoverflow.com/a/34001970/552525 adresinden alınmıştır


Brian - tam olarak aradığım şey değil, ama bence bir dosyayı uygulamama taşımak ve özellikleri JVM argümanları aracılığıyla ayarlamak arasında makul bir uzlaşma.
jconlin

Bence uygulamanız daha karmaşık hale geldikçe (eğer yapacaksa), siz onu daha fazla yapılandırdıkça dosya daha yönetilebilir hale gelir. Ancak itiraf ediyorum, buradaki kullanım durumunuzu tahmin ediyorum.
Brian Agnew

25
{path to file}file:bunun işe yaraması için önceden eklenmesi gerekir .
OR Mapper

2
@ORMapper - Uygun şekilde değişiklik yaptım
Brian Agnew

6
Özellik adı ve sözdizimi değişirken Log4j 2 kullanılıp kullanılmadığına dikkat edin . Bu cevaba bakın .
José Andias

161

Çözüm, aşağıdaki JVM argümanını kullanmaktır:

-Dlog4j.configuration={path to file}

Dosyası (içinde sınıf yolunda DEĞİLSE WEB-INF/classesdisk kullanımı ancak üzerinde biryerde Tomcat durumunda) file:gibi

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

Burada daha fazla bilgi ve örnek: http://logging.apache.org/log4j/1.2/manual.html


2
-Dlogback.configurationFile=C:\logback-test.xml
Oturum Açma

2
Dosyadan bahsetmek için +1 (Tim'in söylediğini yineleyerek. Bu beni birkaç kez log4j ile çılgına
çevirdi

13
Log4j yapılandırmasında hata ayıklamak için çok kullanışlı başka bir JVM argümanı:-Dlog4j.debug
KC

2
Bu yöntemle göreceli yol kullanmak mümkün müdür?
AaA

33

Görünüşe göre bu değişmiş (muhtemelen log4j2 ile):

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

Bakınız: https://logging.apache.org/log4j/2.x/manual/configuration.html


Bu bana şu istisnayı veriyor. C: \ Geliştirme \ tutulmalar \ EclipseMars \ file: C: \ Users \ ABC \ log4j2.xml ben yol mutlak hale nasıl
Cybermonk

Docker Container'ları için, JAVA_PARAMS="-Dlog4j.configurationFile=classpath:log4j2-container.xml"Docker Image, JAVA_PARAMS'ı env değişken ile geçersiz kılmayı destekliyorsa ve dosya Jar'ın içindeyse kullandım.
Marcello de Sales

21

Bunun zaten yanıtlandığını biliyorum, ancak tam olarak aradığınız şey bu olmadığını söylediğiniz için, aşağıdaki alternatifi belirtmek isterim:

Özellikler veya xml dosyası yerine bir yapılandırma sınıfı da kullanabilirsiniz.

-Dlog4j.configuratorClass=com.foo.BarConfigurator

Ayrıntılar için http://logging.apache.org/log4j/1.2/manual.html adresine bakın.


1
Birisi bir yapılandırma dosyası oluşturmaktan kaçınmak istiyorsa bu doğru çözümdür. Kendi özel Yapılandırıcı sınıfınızın içinde BasicConfigurator () 'ı çağırabilir veya istediğiniz şekilde kendi Kaydedicilerinizi ve Ekleyicilerinizi oluşturabilirsiniz. Ama bir yapılandırma dosyasını daha çok tercih ederim!
34'te skiphoppy

11

Genel olarak, log4j.properties dosyanız sınıf yolunda olduğu sürece, Log4j onu JVM başlangıcında otomatik olarak almalıdır.


1
Bu doğrudur: -Dlog4j.configuration yalnızca dosya sınıf yolunda değilse veya sınıf yolunda bulunan ilk dosya olmayan bir dosyayı kullanmak istiyorsanız gereklidir
javadba

8

Geç 2015 yılından bu yana olduğu gibi partiye, Log4J 1.x ulaşmıştır EOL .

Log4J 2.x'ten itibaren JVM seçeneği ,-Dlog4j.configurationFile=<filename>


PS <filename>sınıf yoluna bir dosya göreli olabilir olmadanfile: diğer yanıtlar önerildiği gibi.


2
Diğer cevaplar artık geçerli olmadığı için önemli cevap.
Yossale

1

Göreli Yol da tamam:

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

veya

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

0

Gradle kullanıyorsanız. 'Aplication' eklentisini uygulayabilir ve aşağıdaki komutu kullanabilirsiniz

  applicationDefaultJvmArgs = [
             "-Dlog4j.configurationFile=your.xml",
                              ]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.