2013-02-16 1 views
1

나는 log4j2 베타 4를 사용하고 있습니다. log4j2.xml이 제대로 설정되었으므로 모든 것이 잘 동작합니다. 하지만 런타임에 appender를 변경해야합니다. xml에 정의 된 콘솔에서 특정 파일 위치가있는 RollingFileAppender로 이동합니다.런타임 (웹 응용 프로그램 수신기)에서 RollingFileAppender를 만들고 구성 XML에 정의 된 ConsoleApender를 바꾸는 방법

저는 문서 작성에 어려움을 겪고 있습니다. 아무도 이걸 해결하지 않았 니?

답변

0

앱을 시작할 때 호출되는 코드를 작성하면 루트 로거 목록에서 appender를 제거 할 수 있습니다.

이렇게됩니다. 나는 잘 모르겠다.

Logger.getRootLogger().removeAppender("stdout") 

log4j.properties 파일을 살펴볼 수 있습니까?

+0

thats log4j. 나는 log4j2 ...... –

+0

logback이 필요하다. 비교를해라. 나는 왜 내가 log4j2를 고집하기로 결심했는지 말할 수 없었다. –

+0

제 잘못입니다. 나는 log4j 다음에 '2'를 알지 못한다. 어쨌든 log4j2를 사용하지는 않았지만 구성에 수정이 없을 것이라고 확신합니다. Logback을 살펴볼 수도 있습니다. 그것은 굉장! –

0

파일 위치를 변경할 수있는 기회를 준 플러그인 (기본적으로 RollinfFileAppender 사본)으로 사용자 정의 appender를 만들었습니다. 그리고 로그 레벨을 변경하고 서버에 따라 sysout과 파일 사이를 전환 할 수있는 기회를 준 RootLogger (다시 플러그인으로)를 작성했습니다.

지금 :-)

+0

Maven을 사용한다면 더 나은 접근 방법은'src/main/resources/log4j2.xml'과'src/test/resources/log4j2-test.xml'을 만드는 것입니다. 'log4j2.xml'은'RollingFileAppender'를 포함하고'log4j2-test.xml'은'ConsoleAppender'를 포함합니다. 자세한 내용은 다음 링크를 참조하십시오. http://logging.apache.org/log4j/2.x/manual/configuration.html#UnitTestingInMaven – Muel

0

이 log4j2.xml 파일 시스템 속성에 의해 정의 된 파일 이름/파일 경로와 로거를 정의 쉽게 소리. 당신을 programm에서

<appenders> 
<File name="MyFile" fileName="${sys:logFilename}.log"> 
    <PatternLayout pattern="%d{${datestamp}} [%t] %-5level %logger{36} - %msg%n"/> 
</File> 
</appenders> 

은 파일 이름에 대한 구성 파일에 사용되는 키와 시스템 프로퍼티에 저장, 사용자 입력에서 파일 이름을 읽어 보시기 바랍니다. 컨텍스트를 업데이트하여 구성 파일을 다시로드하십시오. -> 파일 이름은 런타임에 동적으로 생성됩니다.

String filnameInput = "GetInputLikeYouWantIt"; 
System.setProperty("logFilename", filnameInput); 
//update the Logger context to relead the filename with the lookup 
LoggerContext ctx = (LoggerContext) LogManager.getContext(false); 
ctx.reconfigure();