如何在Tomcat 8中为web应用程序配置log4j2?

问题描述:

我正在通过Tomcat 8.0.24将Web服务部署为Web应用程序(战争)。应用程序罐已经过测试,并且工作正常。现在为了配置和测试log4j的目的,我激发了一个运行时错误(没有连接数据库)。如何在Tomcat 8中为web应用程序配置log4j2?

我想设置log4j2为应用程序日志记录(不是为tomcat),我使用Netbeans 8.0.2建立战争。

我已经包含以下jar文件中的类路径:

log4j-api-2.8.jar 
log4j-core-2.8.jar 
log4j-web-2.8.jar 
log4j-jcl-2.8.jar 
commons-logging.jar 

而且log4j2.xml在WEB-INF,只有根记录器配置为捕获一切从Web应用程序来:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration strict="true" status="TRACE"> 
    <Properties> 
    <Property name="filename">C:\logs\Myapp.log</Property> 
    </Properties> 
    <Appenders> 

    <Appender type="Console" name="Console" target="SYSTEM_OUT"> 
     <Layout type="PatternLayout"> 
     <Pattern>%d{HH:mm:ss.SSS} - %-5level %logger - %msg%n</Pattern> 
     </Layout> 
    </Appender> 
    <Appender type="File" name="FileAppender" fileName="${filename}" append="true" immediateFlush="true"> 
     <Layout type="PatternLayout"> 
     <Pattern>%d %p %logger -%C- %m%n</Pattern> 
     </Layout> 
    </Appender> 
    </Appenders> 
    <Loggers> 
    <Root level="ERROR"> 
     <AppenderRef ref="Console"/> 
     <AppenderRef ref="FileAppender" level="WARN"/> 
    </Root> 
    </Loggers> 
</Configuration> 

我有还配置了catalina.properties,以防万一,以覆盖默认的罐子Toshkip:

tomcat.util.scan.StandardJarScanFilter.jarsToScan=log4j-core*.jar,log4j-taglib*.jar,log4j-api*.jar,log4j-web*.jar,log4j-jcl*.jar` 

我相信log4j的被正确初始化为卡特琳娜* .LOG状态,因为状态=“TRACE”:

2017-02-08 14:06:52,355 http-nio-8080-exec-8 DEBUG Log4jServletContextListener ensuring that Log4j starts up properly. 
2017-02-08 14:06:52,357 http-nio-8080-exec-8 DEBUG Log4jServletFilter initialized. 

又因为创建日志文件。

但是,来自应用程序(Web服务jar)的所有运行时错误消息都以catalina * .log结尾,而不是我配置的文件appender。此外,catalina * .log中的这些错误消息没有遵循Appenders定义中定义的任何模式,所以它基本上看起来像log4j2被忽略。

我在做什么错?

在Log4j的文档,我发现有一个log4j的1.2 API组件,它指出,它“使编码的应用程序中使用Log4j 1.2 API来使用Log4j 2来代替。”

那么,我发现应用程序的罐子是使用以前版本的log4j开发的。所以,我包括的log4j-1.2-API-2.8.jar和删除log4j的-JCL-2.8.jar的commons-logging.jar和做的伎俩。现在应用程序的日志消息被发送到配置为appender的文件。

也许这是值得一提的是,第一次测试将的log4j-1.2-API-2.8.jar没有工作后,所以我想这是一种与我后来删除罐子冲突。