복붙노트

[SPRING] log4j : WARN web.xml에서 logger에 대한 appender를 찾을 수 없습니다.

SPRING

log4j : WARN web.xml에서 logger에 대한 appender를 찾을 수 없습니다.

web.xml에 log4jConfigLocation을 이미 넣었지만 다음과 같은 경고 메시지가 표시됩니다.

log4j:WARN No appenders could be found for logger ⤦
    ⤥ (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.

내가 놓친 게 무엇입니까?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/applicationContext.xml
        </param-value>
    </context-param>
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/classes/log4j.properties</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.util.Log4jConfigListener
        </listener-class>
    </listener>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>suara2</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>suara2</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

해결법

  1. ==============================

    1.그것이 전체 log4j.properties 파일이라면 실제로 로거를 생성하지 않는 것처럼 보입니다. 다음과 같은 라인이 필요합니다.

    그것이 전체 log4j.properties 파일이라면 실제로 로거를 생성하지 않는 것처럼 보입니다. 다음과 같은 라인이 필요합니다.

    log4j.rootLogger=debug,A1
    
  2. ==============================

    2.클래스 패스의 올바른 위치에 log4j.properties가 있었지만이 경고는 여전히 직접 사용되었습니다. commons-logging을 통해 log4j를 사용하는 코드는 어떤 이유로 든 괜찮은 것 같습니다.

    클래스 패스의 올바른 위치에 log4j.properties가 있었지만이 경고는 여전히 직접 사용되었습니다. commons-logging을 통해 log4j를 사용하는 코드는 어떤 이유로 든 괜찮은 것 같습니다.

    당신이 가지고 있다면:

    log4j.rootLogger=WARN
    

    그것을 다음으로 변경하십시오 :

    log4j.rootLogger=WARN, console
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n
    

    http://logging.apache.org/log4j/1.2/manual.html에 따르면 :

    이것이 의미하는 것은 로깅이 발생하도록 루트 로거에 appender, appender를 지정해야한다는 것입니다.

    rootLogger에 해당 콘솔 appender를 추가하면이 불만 사항이 사라집니다.

  3. ==============================

    3.log4j.properties가 클래스 경로에없는 경우이 오류가 발생할 수 있습니다.

    log4j.properties가 클래스 경로에없는 경우이 오류가 발생할 수 있습니다.

    즉, log4j.properties를 src 폴더로 이동하고 출력을 bin 폴더로 설정하여 런타임에 log4j.properties가 bin 폴더에서 읽고 오류를 쉽게 해결할 수 있어야합니다.

  4. ==============================

    4.log4j가 "log4j.properties"또는 "log4j.xml"파일을 찾을 수없는 경우이 경고가 표시됩니다.

    log4j가 "log4j.properties"또는 "log4j.xml"파일을 찾을 수없는 경우이 경고가 표시됩니다.

  5. ==============================

    5.또는 로그 구성 파일을로드하기 전에 내가 한 일을하고 로거를 정의 할 수 있습니다. 이것은 그들이 말한 것입니다 : "말 앞에 카트를 넣으십시오."

    또는 로그 구성 파일을로드하기 전에 내가 한 일을하고 로거를 정의 할 수 있습니다. 이것은 그들이 말한 것입니다 : "말 앞에 카트를 넣으십시오."

    코드에서 :

    public static Logger logger = Logger.getLogger("RbReport");
    

    ... 나중에

    PropertyConfigurator.configure(l4j);
    logger = Logger.getLogger("RbReport");
    

    수정 사항은 구성이로드 된 후 로거를 초기화하는 것이 었습니다.

    괴짜를 위해 그것은 "Descarte b4 d 말을 꼈다"이었다.

  6. ==============================

    6.독립형 log4j 응용 프로그램을 구성하려면 BasicConfigurator를 사용할 수 있습니다. 이 솔루션은 Spring 환경과 같은 웹 애플리케이션에 적합하지 않습니다.

    독립형 log4j 응용 프로그램을 구성하려면 BasicConfigurator를 사용할 수 있습니다. 이 솔루션은 Spring 환경과 같은 웹 애플리케이션에 적합하지 않습니다.

    당신은 쓰기 -

    BasicConfigurator.configure();
    

    또는

    ServletContext sc = config.getServletContext();
    String log4jLocation = config.getInitParameter("log4j-properties-location");
    String webAppPath = sc.getRealPath("/");
    String log4jProp = webAppPath + log4jLocation;
    PropertyConfigurator.configure(log4jProp);
    
  7. ==============================

    7.여전히 도움이된다면, 아카이브의 이름을 확인하십시오. 정확히 "log4j.properties"또는 "log4j.xml"(대소 문자 구분)이어야하고 "Alain O'Dea"의 힌트를 따라야합니다. 나는 같은 오류를 얻고 있었지만, 이러한 변경 사항을 수행 한 후에는 모든 것이 잘 작동합니다. 매력처럼 :-). 이것이 도움이되기를 바랍니다.

    여전히 도움이된다면, 아카이브의 이름을 확인하십시오. 정확히 "log4j.properties"또는 "log4j.xml"(대소 문자 구분)이어야하고 "Alain O'Dea"의 힌트를 따라야합니다. 나는 같은 오류를 얻고 있었지만, 이러한 변경 사항을 수행 한 후에는 모든 것이 잘 작동합니다. 매력처럼 :-). 이것이 도움이되기를 바랍니다.

  8. ==============================

    8.제 경우에는 솔루션이 쉬웠습니다. web.xml에 아무 것도 선언 할 필요가 없습니다.

    제 경우에는 솔루션이 쉬웠습니다. web.xml에 아무 것도 선언 할 필요가 없습니다.

    프로젝트가 웹 응용 프로그램이므로 배치 후에 구성 파일은 WEB-INF / classes에 있어야합니다. Java 리소스 폴더 (src / main / resources)를 만들어 (최선을 다해서) 할 것을 권장합니다. 또 다른 방법은 config 파일을 src / main / java에 넣는 것입니다.

    구성 파일 이름을주의하십시오. XML을 사용하는 경우 파일 이름은 log4j.xml이며, 그렇지 않은 경우 log4j.properties입니다.

  9. ==============================

    9.이 줄을 web.xml의 맨 앞에 놓습니다.

    이 줄을 web.xml의 맨 앞에 놓습니다.

        <listener>
            <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
        </listener>
    
       <context-param>
            <param-name>log4jConfigLocation</param-name>
            <param-value>classpath:/main/resources/log4j.xml</param-value>
       </context-param>
    

    자세한 내용은이 링크를 참조하십시오. http : //mariemjabloun.blogspot.com/2014/04/resolved-log4jwarn-no-appenders-could.html

  10. ==============================

    10.좋아, 나는 많은 답변과 매우 정확한 것을 볼 수있다. 그러나 아무도 내 문제를 해결하지 못했습니다. 내 경우의 문제는 root가 소유 한 서버에서 편집중인 log4j.properties 파일이 UNIX 파일 시스템 사용 권한이었습니다. 루트에서만 읽을 수 있습니다. 그러나 배포하고 있던 웹 응용 프로그램은 tomcat이 기본적으로 Linux 시스템에서 사용자 tomcat으로 실행되므로 tomcat에 파일을 읽을 수 없습니다. 희망이 도움이됩니다. 그래서 해결책은 log4j.properties 파일이 상주하는 디렉토리에 'chown tomcat : tomcat log4j.properties'를 입력하는 것입니다.

    좋아, 나는 많은 답변과 매우 정확한 것을 볼 수있다. 그러나 아무도 내 문제를 해결하지 못했습니다. 내 경우의 문제는 root가 소유 한 서버에서 편집중인 log4j.properties 파일이 UNIX 파일 시스템 사용 권한이었습니다. 루트에서만 읽을 수 있습니다. 그러나 배포하고 있던 웹 응용 프로그램은 tomcat이 기본적으로 Linux 시스템에서 사용자 tomcat으로 실행되므로 tomcat에 파일을 읽을 수 없습니다. 희망이 도움이됩니다. 그래서 해결책은 log4j.properties 파일이 상주하는 디렉토리에 'chown tomcat : tomcat log4j.properties'를 입력하는 것입니다.

  11. ==============================

    11.나는 똑같은 문제가 있었다. 동일한 구성 설정 및 동일한 경고 메시지 나를 위해 일한 것은 :  항목의 순서 변경.

    나는 똑같은 문제가 있었다. 동일한 구성 설정 및 동일한 경고 메시지 나를 위해 일한 것은 :  항목의 순서 변경.

    순서가 중요합니다.

  12. ==============================

    12.web.xml에 log4jExposeWebAppRoot -> false를 추가하십시오. 그것은 나와 함께 작동 :)

    web.xml에 log4jExposeWebAppRoot -> false를 추가하십시오. 그것은 나와 함께 작동 :)

    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>path/log4j.properties</param-value>
    </context-param>
    <context-param>
        <param-name>log4jExposeWebAppRoot</param-name>
        <param-value>false</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
    
  13. ==============================

    13.이 줄을 xml 파일에 추가 할 수 있습니다.

    이 줄을 xml 파일에 추가 할 수 있습니다.

    <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE beans PUBLIC
     "-//SPRING//DTD BEAN 2.0//EN"
    "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
    

    그리고 xml 파일이 src 폴더 아래에 있는지 확인하십시오.

  14. from https://stackoverflow.com/questions/1266139/log4jwarn-no-appenders-could-be-found-for-logger-in-web-xml by cc-by-sa and MIT license