programing

log4j:WARN web.xml에서 로거용 부록을 찾을 수 없습니다.

showcode 2023. 3. 26. 11:59
반응형

log4j:WARN web.xml에서 로거용 부록을 찾을 수 없습니다.

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>

이것이 log4j.properties 파일 전체라면 실제로는 로거를 작성하지 않은 것 같습니다.다음과 같은 행이 필요합니다.

log4j.rootLogger=debug,A1

클래스 패스의 올바른 위치에 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에 따르면:

루트 로거는 익명이지만 Logger.getRootLogger() 메서드를 사용하여 액세스할 수 있습니다.루트에 연결된 기본 Appender는 없습니다.

즉, 로깅을 수행하려면 루트 로거에 appender(임의의 appender)를 지정해야 합니다.

rootLogger에 콘솔어펜더를 추가하면 이 불만이 사라집니다.

는 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 이런 오류가 발생할 수 있어요.log4j.properties클래스 패스에 존재하지 않습니다.

은 'VIP, VIP'를 뜻입니다.log4j.properties시 src가 bin이 되도록 합니다.log4j.properties쉽게 됩니다.bin 폴 、 will 、 will 、 will will will will will 。

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

또는 로그 컨피규레이션파일이 로드되기 전에 로거를 정의해 둘 수도 있습니다."말보다 본말이 먼저다"라는 말이 나올 것이다.

코드:

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

...나중에

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

수정은 설정이 로드된 후에 로거를 초기화하는 것이었습니다.

괴짜들에게 그것은 "Putting Descarte b4 d horse"였다.

스탠드아론 log4j 어플리케이션용으로 설정하는 경우는, Basic Configurator 를 사용할 수 있습니다.이 솔루션은 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);

그래도 도움말이 있는 경우 아카이브 이름을 확인하십시오. "log4j.properties" 또는 "log4j.xml"(대문자와 소문자가 구분됨)로 정확한 이름을 지정하고 "Alain O'Dea"의 힌트를 따르십시오.같은 에러가 발생하고 있습니다만, 이러한 변경을 실시한 후에는 정상적으로 동작합니다.마치 마법처럼 :-)이게 도움이 되길 바라

저 같은 경우에는 해결이 쉬웠어요.신고할 필요가 없습니다.web.xml.

프로젝트가 웹 응용 프로그램이기 때문에 컨피규레이션파일이 켜져 있어야 합니다.WEB-INF/classes를 참조해 주세요.Java 리소스 폴더를 만드는 것이 좋습니다.src/main/resources(best pratice)를 사용합니다.또 다른 접근법은 컨피규레이션파일을 RPM에 저장하는 것입니다.src/main/java.

설정 파일명에 주의해 주세요.XML 을 사용하고 있는 경우는, 파일명은 다음과 같습니다.log4j.xml,그렇지않으면log4j.properties.

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> 

네, 정답이 많네요.하지만 아무도 제 문제를 해결해주지 못했어요.제 경우 UNIX 파일 시스템 권한에는 서버에서 편집하고 있던 log4j.properties 파일이 root에 의해 소유되며 root에 의해서만 읽을 수 있다는 문제가 있었습니다.다만, 전개하고 있던 Web 애플리케이션은, Linux 시스템상에서 디폴트로 유저 Tomcat 로서 Tomcat 가 실행되고 있기 때문에, Tomcat 가 파일을 읽어낼 수 없었습니다.이것이 도움이 되기를 바랍니다.그러면 솔루션은 log4j.properties 파일이 있는 디렉토리에 'chown tomcat:tomcat log4j.properties'를 입력하고 있었습니다.

log4j 추가web.xml에서 WebAppRoot -> 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>

같은 문제가 발생하였습니다.동일한 설정과 동일한 경고 메시지가 표시됩니다.나에게 효과가 있었던 것은, 엔트리의 순서를 변경하는 입니다.

  • 로그 설정 [context param and listener]엔트리를 [applicationContext.xml]엔트리 앞에 배치하면 동작합니다.

주문은 중요한 것 같습니다.

언급URL : https://stackoverflow.com/questions/1266139/log4jwarn-no-appenders-could-be-found-for-logger-in-web-xml

반응형