2017-11-17 21 views
1

로거에 대한 특정 정보 만 표시되는 방식으로 로거를 사용하고 싶습니다. 내 시스템에는 이미 여러 개의 appenders가 사용 중이며 레벨별로 필터링되지 않지만 로깅 중에 명시 적으로 해결되는 추가 append가 필요합니다.명시 적으로 log4 appender 주소를 지정하십시오.

<appender-ref ref="FILE"/> 
<appender-ref ref="CONSOLE"/> 
<appender-ref ref="SPECIAL"/> 

"SPECIAL"appender가 필요한 로그를 만듭니다. appender를 명시 적으로 처리하는 것이 가능하며 표준 로깅 항목은이를 방지해야합니다.

예 내가

logger.getAppender("SPECIAL").log("my special log info"); 

답변

0

을 필요 나는 당신의 가장 좋은 방법은 마커의 어떤 종류에 따라 로그 메시지를 필터링 할 StringMatchFilter를 사용하는 것이 좋습니다 것입니다. 여기

import org.apache.log4j.Logger; 

public class Example1 { 
    private static final Logger logger = Logger.getLogger(Example1.class); 
    // This should probably go into a general purpose constants class of some kind 
    // but for simplicity of this example it's in here. 
    private static final String SPECIAL_MARKER = "SPECIAL"; 

    public static void main(String[] args){ 
     logger.debug("debug from my.Example1"); 
     logger.info("info from my.Example1"); 
     logger.warn("warning from my.Example1"); 
     logger.error("error from my.Example1"); 
     logger.fatal("fatal from my.Example1"); 

     logger.info(SPECIAL_MARKER+" This goes in a special file"); 
    } 
} 

의 log4j 속성입니다 : 여기에 몇 가지 예제 코드는

log4j.rootLogger=INFO, stdout, R 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 

log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=logs/special.log 
log4j.appender.R.MaxFileSize=100KB 
log4j.appender.R.MaxBackupIndex=1 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n 
log4j.appender.R.filter.1=org.apache.log4j.varia.StringMatchFilter 
log4j.appender.R.filter.1.StringToMatch=SPECIAL 
log4j.appender.R.filter.1.AcceptOnMatch=true 
log4j.appender.R.filter.2=org.apache.log4j.varia.DenyAllFilter 

대안이 어 펜더를 참조하는 로거 구성을 추가 한 다음 로거를 만들 것을 로거 이름을 사용하는 것입니다. 두 번째 로거를 선언해야 할 때처럼 덜 우아합니다.

예 자바 코드 :

import org.apache.log4j.Logger; 

public class Example1 { 
    private static final Logger logger = Logger.getLogger(Example1.class); 
    private static final Logger specialLog = Logger.getLogger("special"); 

    public static void main(String[] args){ 
     logger.debug("debug from my.Example1"); 
     logger.info("info from my.Example1"); 
     logger.warn("warning from my.Example1"); 
     logger.error("error from my.Example1"); 
     logger.fatal("fatal from my.Example1"); 

     specialLog.info("This goes in a special file"); 
    } 
} 

log4j.properties 다음 "특수"로거 위의 예에서

log4j.rootLogger=INFO, stdout 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 

log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=logs/special.log 
log4j.appender.R.MaxFileSize=100KB 
log4j.appender.R.MaxBackupIndex=1 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n 

log4j.logger.special=INFO, R, stdout 
log4j.additivity.special=false 

특별 로그 출력을 생성하는데 사용된다.