JVM 인수를 통한 log4j 구성?


133

log4j를 올바르게 실행하려면 JVM에 인수로 설정 / 전달해야하는 변수는 무엇입니까? 그리고 제대로 나는 불평하고 콘솔에 인쇄하지 않는 것을 의미합니다. 전형적인 예를 볼 수 있습니까?

참고 : 응용 프로그램에서 log4j.properties 파일을 작성하지 않아야합니다.


2
독자는주의하십시오 : 질문은 log4j2가 아니라 log4j에 대해 묻는다는 것을 알아야합니다.
neves

답변:


161

log4j 구성 파일이 있습니까? 그냥 사용하여 참조하십시오

-Dlog4j.configuration={path to file}

{file에 대한 경로} 앞에 접두사를 붙여야합니다. file:

편집 : log4j2로 작업하는 경우 사용해야합니다

-Dlog4j.configurationFile={path to file}

답변 https://stackoverflow.com/a/34001970/552525 에서 가져옴


Brian-정확히 내가 찾던 것은 아니지만 파일을 내 응용 프로그램으로 옮기고 JVM 인수를 통해 속성을 설정하는 것이 적절한 타협이라고 생각합니다.
jconlin

응용 프로그램이 더 복잡해지면 파일을 더 구성할수록 파일을보다 쉽게 ​​관리 할 수 ​​있다고 생각합니다. 그러나 나는 당신의 유스 케이스에 대해 추측하고 있다고 고백합니다.
Brian Agnew

25
{path to file}file:이 작업을 수행하려면 앞에 추가해야합니다 .
또는 매퍼

2
@ORMapper - 내가 적절하게 개정 한
브라이언 애그뉴

6
속성 이름과 구문이 변경 될 때 Log4j 2 를 사용하는지 확인하십시오 . 이 답변을 참조하십시오 .
José Andias

161

솔루션은 다음 JVM 인수를 사용하고 있습니다.

-Dlog4j.configuration={path to file}

파일이 (클래스 경로에없는 경우 WEB-INF/classes디스크를 사용하지만, 어딘가에서 톰캣의 경우) file:와 같은

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

자세한 정보 및 예 : http://logging.apache.org/log4j/1.2/manual.html


2
-Dlogback.configurationFile=C:\logback-test.xml
로그 백

2
파일을 언급 한 +1 (Tim의 말을 반복 함. 이것은 log4j에 여러 번 미쳤습니다.
javadba

13
log4j 구성을 디버그하는 데 유용한 또 다른 JVM 인수 :-Dlog4j.debug
KC

2
이 방법으로 상대 경로를 사용할 수 있습니까?
AaA

33

이것은 (아마도 log4j2에서) 다음과 같이 변경된 것 같습니다.

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

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


이것은 다음 예외를 제공합니다. C : \ Development \ Eclipses \ EclipseMars \ file : C : \ Users \ ABC \ log4j2.xml 경로를 어떻게 절대로 만들려면
Cybermonk

Docker 컨테이너의 JAVA_PARAMS="-Dlog4j.configurationFile=classpath:log4j2-container.xml"경우 Docker 이미지가 env vars로 JAVA_PARAMS 재정의를 지원하고 파일이 Jar 안에있는 경우 사용했습니다.
Marcello de Sales

21

나는 이것이 이미 답변 된 것을 알고 있지만, 이것이 당신이 찾고있는 것이 아니라고 말했기 때문에 다음 대안을 지적하고 싶습니다.

속성 또는 xml 파일 대신 구성 클래스를 사용할 수도 있습니다.

-Dlog4j.configuratorClass=com.foo.BarConfigurator

자세한 내용은 http://logging.apache.org/log4j/1.2/manual.html 을 참조하십시오.


1
누군가 구성 파일을 작성하지 않으려는 경우 이것이 올바른 솔루션입니다. 사용자 정의 Configurator 클래스 내에서 BasicConfigurator ()를 호출하거나 원하는대로 고유 한 로거 및 Appender를 작성할 수 있습니다. 그러나 구성 파일을 훨씬 선호합니다!
skiphoppy

11

일반적으로 log4j.properties 파일이 클래스 경로에있는 한 Log4j는 JVM 시작시 자동으로 파일을 가져와야합니다.


1
-Dlog4j.configuration은 파일이 클래스 경로에 없거나 클래스 경로에서 처음 발견되지 않은 파일을 사용하려는 경우에만 필요합니다.
javadba

8

Log4J 1.x는 2015 년부터 파티에 늦게 EOL에 도달했습니다 .

JVM 옵션 이후의 Log4J 2.x 는-Dlog4j.configurationFile=<filename>


PS는 <filename>클래스 경로에 파일의 상대가 될 수 없는file: 다른 답변에 제안.


2
다른 답변은 더 이상 유효하지 않으므로 중요한 답변입니다.
Yossale

1

상대 경로도 괜찮습니다.

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

또는

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

0

gradle을 사용하는 경우. '애플리케이션'플러그인을 적용하고 다음 명령을 사용할 수 있습니다

  applicationDefaultJvmArgs = [
             "-Dlog4j.configurationFile=your.xml",
                              ]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.