2014-06-19 6 views
0

프로젝트에서 log4j를 처음 사용하고 있습니다. 로그 출력에 사용자 정의 구성을 사용하려고합니다. 로거 구성을 log4j.xml 또는 log4j.properties가 아닌 사용자 정의 파일에 저장하려고합니다. 이것은 내가 지금 무엇을 가지고 :log4j - appenders를 찾을 수 없습니다. 사용자 정의 설정 파일

생성자 :

public void getPacketsFromStream(InputStream inputStream) { 
    logger.info("Manager " + MANAGER_ID + " started."); 

(가 더 나중에,하지만 그건 중요하지 않아)

: 처음 로거를 호출

public Manager(int managerID, String loggerConfigFile) { 
    this.MANAGER_ID = managerID; 
    logger = Logger.getLogger("testLogger" + MANAGER_ID); 
    PropertyConfigurator.configure(loggerConfigFile); 
} 

방법

test1.config의 내용 (생성자의 loggerConfigFile 값)

testLogger1=DEBUG,A1 
log4j.appender.A1=org.apache.log4j.ConsoleAppender 
log4j.appender.A1.layout=org.apache.log4j.PatternLayout 
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n 

확인해 보니 구성 파일 은 클래스 경로에입니다.

로거가 콘솔에 하나의 명령문을 쓰게 될 것으로 예상됩니다. 대신 다음 출력을 얻습니다 (-Dlog4j.debug 플래그 사용).

log4j: Trying to find [log4j.xml] using context classloader [email protected] 
log4j: Trying to find [log4j.xml] using [email protected] class loader. 
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource(). 
log4j: Trying to find [log4j.properties] using context classloader [email protected] 
log4j: Trying to find [log4j.properties] using [email protected] class loader. 
log4j: Trying to find [log4j.properties] using ClassLoader.getSystemResource(). 
log4j: Could not find resource: [null]. 
log4j: Could not find root logger information. Is this OK? 
log4j: Finished configuring. 
log4j:WARN No appenders could be found for logger (testLogger1). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

무엇이 잘못 되었나요?

편집 : 첫 번째 대답에서 알 수 있듯이

내가 한 - 전에 log4j 구성을 이동 구성 파일 log4j.rootLogger=DEBUG,A1에 rootLogger을 추가하고, 예상되는 결과를 얻었다. 그럼 난 좀 더 설정 파일을 수정했는데, 이것으로 끝났다 :

log4j.rootLogger=DEBUG,A0 
testLogger1=DEBUG,A1 

log4j.appender.A0=org.apache.log4j.ConsoleAppender 
log4j.appender.A1=org.apache.log4j.ConsoleAppender 

log4j.appender.A0.layout=org.apache.log4j.PatternLayout 
log4j.appender.A1.layout=org.apache.log4j.PatternLayout 

log4j.appender.A0.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x --- %m%n 
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n 

참고 A0 및 A1은 약간 다른 출력 형식을 가지고있다. 이것은 내가 출력에있어 무엇 :

log4j: Trying to find [log4j.xml] using context classloader [email protected] 
log4j: Trying to find [log4j.xml] using [email protected] class loader. 
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource(). 
log4j: Trying to find [log4j.properties] using context classloader [email protected] 
log4j: Trying to find [log4j.properties] using [email protected] class loader. 
log4j: Trying to find [log4j.properties] using ClassLoader.getSystemResource(). 
log4j: Could not find resource: [null]. 
log4j: Parsing for [root] with value=[DEBUG,A0]. 
log4j: Level token is [DEBUG]. 
log4j: Category root set to DEBUG 
log4j: Parsing appender named "A0". 
log4j: Parsing layout options for "A0". 
log4j: Setting property [conversionPattern] to [%-4r %-5p [%t] %37c %3x --- %m%n]. 
log4j: End of parsing for "A0". 
log4j: Parsed "A0" options. 
log4j: Finished configuring. 
0 INFO [main]       testLogger1  --- Manager 1 started. 

가 어떻게하여 Log4j testLogger1과 펜더 A1보다는 rootLogger와 A0를 사용할 수 있습니까? 나는 그걸 할 getLogger("testLogger1")을 기대했을 것입니다.

답변

0

완전한 log4j 매뉴얼을 읽은 것 같습니다. 설정 파일에서 로거 이름 앞에 log4j.logger.이라는 접두사가 있어야합니다. 다음 설정 파일이 저에게 유용합니다 :

log4j.logger.testLogger1=DEBUG,A1 

log4j.appender.A1=org.apache.log4j.ConsoleAppender 

log4j.appender.A1.layout=org.apache.log4j.PatternLayout 

log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n 
1

당신은 로거 인스턴스 전에 Log4J를 을 구성해야합니다

public Manager(int managerID, String loggerConfigFile) { 
    PropertyConfigurator.configure(loggerConfigFile); 
    this.MANAGER_ID = managerID; 
    logger = Logger.getLogger("testLogger" + MANAGER_ID); 
} 

당신은 또한 "루트 로거 정보를 찾을 수 없습니다"피하기 위해 구성에 루트 로거를 정의해야합니다을; 예 :

log4j.rootLogger=DEBUG, A1 

자세한 내용은 http://logging.apache.org/log4j/1.2/manual.html을 참조하십시오. 예를 들어 Java 환경 변수를 사용하여 Java 코드에서 대신 Log4J 구성을 포함하는 파일 이름/경로를 지정할 수 있습니다.

관련 문제