2015-01-29 2 views
0

Log4j를 프로그래밍 방식으로 구성하려고합니다. 레벨이 ALL로 설정된 로거에 여러 개의 애펜더를 추가하려고합니다. 또한 다른 appender (removeallAppenders 사용)가 없습니다.log4j 제한자를 특정 레벨에 추가하십시오.

그러나 INFO 레벨의 로거를 호출 할 때 놀랍습니다. 경고 레벨 에는 2 개의 출력이 있습니다. 내가 필요한 것은 appender에서 구성한 인쇄 레벨뿐입니다.

LoggerFactory loggerr = new LoggerFactory("myLoggerName","",""); 

    logger.removeAllAppenders(); 
    ConsoleAppender caWarn = new ConsoleAppender(); 
    caWarn.setLayout(layout); 
    caWarn.setName("warnconsole"); 
    caWarn.setThreshold(Level.INFO); 
    caWarn.activateOptions(); 
    logger.addAppender(caWarn); 

    loggerr.info("infooo"); 
    loggerr.warn("warning"); 

어떻게에만 정보 로그를 인쇄 할 수 있습니다 : 여기

코드의 비트가 내가 사용입니까?

+2

이 정보를보다 높은 프리 오을 가지고 경고 그것을 발견 어쩌면 지루한 내가 원하는 수준에 대한 모든 펜더하지만 여전히 유일한 응답 및 솔루션을 제한했다. 그래서 레벨을 정보로 설정하면 정보와 경고 (그리고 오류와 치명적)가 출력됩니다. 출력을 [필터] (http://logging.apache.org/log4j/2.0/manual/filters.html#ThresholdFilter) 할 수는 있지만 이전에는하지 않았습니다. – Fildor

+0

네, 제가 해냈습니다. 지금까지 발견 된 유일한 해결책입니다. – dzgeek

답변

0

@Fildor가 말했듯이, Appender 필터를 사용하여 알아 냈습니다.

필터는 세 가지 옵션 LevelMin, LevelMax와 AcceptOnMatch 인정.

그리고 내가 프로그래밍

ConsoleAppender caInfo = new ConsoleAppender(); 
    caInfo.setName("infoConsole"); 
    caInfo.setThreshold(Level.DEBUG); 
    layout.setConversionPattern("%-5p %d [%t] %c %x - %m%n"); 
    caInfo.setLayout(layout); 
    LevelRangeFilter lrf = new LevelRangeFilter(); 
    lrf.setLevelMax(Level.DEBUG); 
    lrf.setLevelMin(Level.DEBUG); 
    caInfo.addFilter(lrf); 
    caInfo.activateOptions(); 
    logger.addAppender(caInfo); 
관련 문제