프로젝트에서 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")
을 기대했을 것입니다.