웹사이트 검색

log4j 수정 WARN 로거에 대한 어펜더를 찾을 수 없습니다. log4j 시스템을 올바르게 초기화하십시오.


이 글을 읽고 있다면 log4j 프레임워크를 사용하고 있어야 하며 아래와 같은 오류 메시지가 나타납니다.

log4j:WARN No appenders could be found for logger
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See https://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

어펜더가 없다는 Log4j 경고는 독립 실행형 애플리케이션의 경우 콘솔에 표시되고 Tomcat 또는 JBoss와 같은 일부 서블릿 컨테이너에서 실행되는 웹 애플리케이션의 경우 서버 로그에 표시됩니다. log4j 경고에 어펜더가 없다는 여러 가지 이유가 있을 수 있습니다. 일반적인 이유와 해결 방법을 살펴보겠습니다.

log4j.xml 또는 log4j.properties 파일이 클래스 경로에 없습니다.

  1. log4j 구성 파일 이름이 다릅니다.

Log4j는 표준 파일 이름을 찾습니다. 따라서 log4j 구성 파일 이름이 myapp-log4j.xml 또는 myapp-log4j.properties인 경우 log4j가 자동으로 로드할 수 없으며 표준 경고 메시지가 표시됩니다. Standalone 자바 어플리케이션의 경우 사용하기 전에 main 메소드 내부에 설정을 하여 쉽게 수정할 수 있습니다. 예를 들어;

/**
 * method to init log4j configurations, should be called first before using logging
 */
private static void init() {
	DOMConfigurator.configure("myapp-log4j.xml");
	// OR for property file, should use any one of these
	//PropertyConfigurator.configure("myapp-log4j.properties");
}

그러나 구성 파일이 WEB-INF/classes 디렉토리 안에 있기 때문에 웹 애플리케이션에서는 이 간단한 접근 방식을 사용할 수 없습니다. 아래 코드와 같이 ServletContextListener를 통해 이 구성을 수행할 수 있습니다.

public final class Log4jInitListener implements ServletContextListener {
 
    public void contextDestroyed(ServletContextEvent paramServletContextEvent)  { 
    }
 
    public void contextInitialized(ServletContextEvent servletContext)  { 
        String webAppPath = servletContext.getServletContext().getRealPath("/");
    String log4jFilePath = webAppPath + "WEB-INF/classes/myapp-log4j.xml";
        DOMConfigurator.configure(log4jFilePath);
        System.out.println("initialized log4j configuration from file:"+log4jFilePath);
    }
     
}

또 다른 방법은 아래와 같이 java 옵션을 통해 log4j.configuration 시스템 속성을 설정하는 것입니다.

-Dlog4j.configuration=file:///path/to/your/myapp-log4j.xml

Log4j 프레임워크는 파일 확장자를 기반으로 DOMConfigurator 또는 PropertyConfigurator를 사용할 만큼 똑똑합니다. 그게 전부입니다. log4j는 이러한 초기 문제를 파악하면 사용하기 쉽습니다. 참조:

  • Apache log4j 기본 초기화 절차
  • 독립형 및 웹 애플리케이션용 Log4j 자습서