2015-01-30 1 views
0

로깅을 수행하기 위해 log4j2를 얻으려고 애 쓰고 있습니다. log4j 설정을 추적 레벨로 설정하더라도 디버깅 할 추적을 얻지 못합니다. log4j2가 콘솔, 파일 또는 syslog에 로깅하지 않습니다.

사용하여 (또는 오히려 사용하기) 나는 지금까지 내가 말할 수있는 모든 문서를 따라했기 때문에 이유에 관해서는 손실을 조금입니다 2.1

2.5의 log4j를 서블릿입니까?

package myPkg; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 
import org.apache.logging.log4j.web.WebLoggerContextUtils; 

@Path("myresource") 
public class MyResource { 
    final Logger logger = LogManager.getLogger(MyResource.class); 
    logger.debug("test"); 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getIt() { 
    logger.debug("test"); 
     logger.info("INFO"); 
     logger.warn("WARN"); 
     return "Got it!"; 
    } 
} 

관련 추출물 인 문서에 따라 다음과 같이 나는 web.xml에 변경을 구현 :

<!-- log4j--> 
    <listener> 
     <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class> 
    </listener> 

    <filter> 
     <filter-name>log4jServletFilter</filter-name> 
     <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>log4jServletFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
     <dispatcher>REQUEST</dispatcher> 
     <dispatcher>FORWARD</dispatcher> 
     <dispatcher>INCLUDE</dispatcher> 
     <dispatcher>ERROR</dispatcher> 
    </filter-mapping> 
<context-param> 
    <description>log4j Context Name</description> 
    <param-name>log4jContextName</param-name> 
    <param-value>myWeb</param-value> 
</context-param> 
<context-param> 
    <description>log4j Configuration File Location</description> 
    <param-name>log4jConfiguration</param-name> 
    <param-value>file:///home/ME/testConfig/log4j.xml</param-value> 
</context-param> 
    <!-- end log4j--> 

을 그리고 log4j에 대한 내 pom.xml 파일이

<dependency> 
      <groupId>org.apache.logging.log4j</groupId> 
      <artifactId>log4j-api</artifactId> 
      <version>${log4j.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.logging.log4j</groupId> 
      <artifactId>log4j-core</artifactId> 
      <version>${log4j.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.logging.log4j</groupId> 
      <artifactId>log4j-web</artifactId> 
      <version>${log4j.version}</version> 
     </dependency> 

과 같습니다 내 log4j.xml 모양은

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN"> 
<Appenders> 
<!-- STDOUT --> 
<Console name="STDOUT" target="SYSTEM_OUT"> 
<PatternLayout pattern="%m%n"/> 
</Console> 
<!-- DEBUG FILE --> 
<File name="debugFile" fileName="/home/ME/testConfig/debug.log"> 
<ThresholdFilter level="TRACE" onMatch="ACCEPT" onMismatch="NEUTRAL"/> 
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/> 
<PatternLayout> 
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern> 
</PatternLayout> 
</File> 
<!-- SYSLOG --> 
<Syslog name="RFC5424" format="RFC5424" host="localhost" port="514" 
protocol="TCP" appName="VoIP" includeMDC="true" 
facility="LOCAL0" enterpriseNumber="43053" newLine="true" 
messageId="Audit" id="App"/> 
<!-- DO LOGGING --> 
</Appenders> 
<Loggers> 
<Root level="trace"> 
<AppenderRef ref="debugFile" level="TRACE"/> 
<AppenderRef ref="STDOUT" level="WARN"/> 
<AppenderRef ref="RFC5424" level="INFO"/> 
</Root> 
</Loggers> 
</Configuration> 

답변

0

참고 log4j2.1에 버그가있는 것으로 보입니다. XML 헤더 (0x) 앞에 공백이 있으면 자동으로 종료됩니다!

+0

2.2 이상의 2.2에서 동일한 문제가 발생했으며 2.2에서는 log4j.properties가 작동하는 반면 2.5에서는 log4j.xml이어야합니다. 실패하면 자동으로 실패합니다. 나는 이것이 버그라고 생각한다. –