2014-02-24 2 views
1

저는 log4j2를 처음 사용하고 있습니다. 이제 log4j2가 초기화되었고 작업 중이지만 루트 로거 수준을 설정할 수 없습니다.log4j2 루트 수준이 작동하지 않습니다.

내 프로젝트는 Java Web Project (Windows 7 x64에서 MyEclipse를 사용 중입니다)이며 Tomcat 7.0.52에서 실행합니다.

나는 수업이를 사용

log.trace("Here is some TRACE"); 
    log.debug("Here is some DEBUG"); 
    log.info("Here is some INFO"); 
    log.warn("Here is some WARN"); 
    log.error("Here is some ERROR"); 
    log.fatal("Here is some FATAL"); 

는 문서에 따라, 나는 log4j2의 기본 설정입니다 생각 오류 및 치명적 메시지를 받았습니다. 그건 내 자신의 구성이 효과가 없다는 것을 의미합니다.

내 log4j2.xml을 같이

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="OFF"> 
    <appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </Console> 
    <File name="File" fileName="logs/example.log"> 
     <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </File> 
    </appenders> 
    <loggers> 

    <root level="debug"> 
     <appender-ref ref="Console"/> 
     <appender-ref ref="File"/> 
    </root> 
    </loggers> 
</configuration> 

log4j2.xml 파일이 패키지 아래에 배치 된 나는이 같은 web.xml 파일을 구성 배포 로그에 따르면

<context-param> 
    <param-name>log4jConfigLocation</param-name> 
     <param-value>classpath:/path/to/a/package/log4j2.xml</param-value> 
    </context-param> 

    <context-param> 
    <param-name>log4jRefreshInterval</param-name> 
    <param-value>60000</param-value> 
    </context-param> 

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

, 내 생각 log4j2가 구성 파일을 찾았습니다 :

INFO: Initializing log4j from [classpath:/path/to/a/package/log4j2.xml] 
INFO 24, 2014 3:37:34 org.apache.catalina.core.ApplicationContext log 
INFO: Log4jServletContextListener ensuring that Log4j starts up properly. 
INFO 24, 2014 3:37:34 org.apache.catalina.core.ApplicationContext log 
INFO: Log4jServletFilter initialized. 

문제?

@Remko에게 log4j.configurationFile을 언급 해 주신 덕분에 무엇이 system property인지 알 수있었습니다.

이전에 log4j2의 documentation에있는 자동화 구성 세션에 대해 읽었지만 system property을 이해하지 못해서 그냥 무시했습니다.

여전히

내가 <context-param>system property의 관계에 대해 확실하지, 그래서 나는이 시도 :

<context-param> 
    <param-name>log4j.configurationFile</param-name> 
    <param-value>classpath:/path/to/a/package/log4j2.xml</param-value> 
</context-param> 

작동하지 않습니다.

둘째, 나는 바람둥이의 시작 옵션에 -Dlog4j.configurationFile="CLASSPATH:/path/to/a/package/log4j2.xml"을 추가하려고 시도했다.

나는 내 문제 그것을 this

같은이 아마 configurationFile이 CLASSPATH 표기법을 지원하지 않는 것을 발견, 그래서는 절대 경로 여전히 -Dlog4j.configurationFile="F:\MySpace\myproject\src\foo\blabla\resource\log4j2.xml"

를 사용하려고, 그것은 ..

를 작동하지 않습니다
+0

'classpath : path' 표기법은 위치를 지원하지만 * 소문자 여야합니다 *. –

+0

팁 : Log4J2가 ''로 시작하도록 구성을 변경하여 log4j2.xml 구성 파일을 찾았는지 확인할 수 있습니다. 그러면 log4j2가 log4j2.xml 파일을 찾으면 log4j2 내부 로깅이 콘솔 (예 : Tomcat 콘솔)에 인쇄됩니다. –

+0

팁 2 : 시스템 등록 정보'-Dlog4j2.StatusLogger.level = TRACE'를 설정하여 내부 log4j 상태 로거를 활성화하십시오. 그러면 log4j2 초기화에 대한 세부 사항이 콘솔에 인쇄됩니다. 그것은 어떤 일이 잘못 될지에 대한 힌트를 줄 수 있습니다 ... –

답변

0

war4j2.xml을 war 파일의 WEB-INF/classes /에 넣으십시오. 이 경우 web.xml에 위치를 구성 할 필요가 없습니다.


UPDATE : 은 web.xml (log4jConfigLocation)에 지정된 속성 이름이없는 Log4J2 들어 Log4J를-1.2 이다.

Log4J2의 올바른 속성 이름은 log4j.configurationFile입니다. (이름에도 불구하고 그것은 단지 파일뿐만 아니라 classpath: 계획을 이해합니다.)

+1

'log4j2.xml'을'WEB-INF/classes /'또는'src'에두면 괜찮을 것입니다. 그러나 무엇이 궁금한 점은 내가 구성한 곳에서 로그를 읽었을 때 구성을 읽었지만 효과가 없다는 것입니다. –

+1

흠 ... 아마도 classpath :/path/to/a/package/log4j2.xml에서 초기화하려고 시도하고 있다고 말할 것입니다. 해당 위치에서 아무 것도 찾을 수없는 경우 명확한 오류를보고해야합니다. 그건 그렇고, 나는 비슷한 문제를 과거에 가지고있다 : 당신이 처음 슬래시를 제거하고'classpath : path/to/a/package/log4j2.xml'을 사용하면 어떨까요? –

+0

초기 슬래시와 관련이 없다고 생각합니다.이 초기 슬래시로 다른 항목이 있는데 제대로 작동합니다. 처음 슬래시를 제거하여 조언을 구하지만 작동하지 않습니다. –

관련 문제