2014-05-11 1 views
11

log4j2의 rootLogger appender 하나를 런타임에 Java로 동적으로 켜거나 끄는 방법은 무엇입니까?log4j2에서 rootLogger의 한 appender를 동적으로 켜거나 끄는 방법은 무엇입니까?

예를 들어, 나는 콘솔이 appender를 사용하지 않도록 싶어 : 가능

... 
    <Loggers> 
     <Root level="INFO"> 
      <AppenderRef ref="Console"/> 
      <AppenderRef ref="RollingFile"/> 
     </Root> 
    </Loggers> 
... 

인가?

+0

IMO 코드를 통해 조작하려는 경우 appenders를 프로그래밍 방식으로 추가해야합니다. 비슷한 질문이 있습니다. http://stackoverflow.com/questions/10699358/log4j-creating-modifying-appenders-at-runtime-log-file-recreated-and-not-appe and http://stackoverflow.com/questions/1909871/how-can-i-access-the-configured-log4j-appenders-at-runtime – Hirak

+0

문맥이 많이 없습니다. 하지만 런타임시 JMX를 통해 활성화/비활성화 할 수 있습니까? – drgn

답변

0

시스템 속성 값을 확인하는 스크립트 appenderref에 스크립트 필터를 추가 할 수 있습니다. 그런 다음 콘솔에 대한 로깅을 사용하지 않으려면 속성을 설정하십시오. 다시 켜려면 재설정하십시오.

1

appender를 프로그래밍 방식으로 추가하거나 제거 할 수 있습니다. 귀하의 경우의 메소드 stopstartLifeCycle 인터페이스가있다 Console

final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); 
final Configuration config = ctx.getConfiguration(); 
config.getRootLogger().removeAppender("CONSOLE"); 
ctx.updateLoggers(); 

제거 할 수 있지만, 정지 한 후에는 펜더를 다시 시작할 수없는 것 같습니다.