[java] 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, any appender를 지정해야한다는 것입니다.

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


답변

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

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


답변

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 응용 프로그램을 구성하려면 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);


답변

여전히 도움이된다면 아카이브의 이름을 확인하고 정확한 “log4j.properties”또는 “log4j.xml”(대소 문자 구분)이어야하며 “Alain O’Dea”의 힌트를 따르십시오. 나는 같은 오류가 발생했지만 이러한 변경을 한 후에는 모든 것이 잘 작동합니다. 마치 매력처럼 :-). 도움이 되었기를 바랍니다.