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

时间:2017-02-10 00:49:26

标签: web-applications log4j2 tomcat8

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

我试图仅为应用程序日志记录设置log4j2(而不是tomcat),并且我使用Netbeans 8.0.2来构建战争。

我在classpath中包含了以下jar:

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

WEB-INF中的log4j2.xml,只配置了root logger来捕获来自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,以防万一,覆盖默认的jarsToSkip:

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

我认为log4j被正确初始化为catalina * .log状态,因为状态=&#34; TRACE&#34;:

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结尾,而不是我已配置的文件追加程序。此外,catalina * .log中的那些错误消息不遵循Appenders&#39;中定义的任何模式。定义,所以它基本上似乎被忽略了log4j2。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

在log4j的文档中,我发现组件下有 log4j 1.2 API ,它声明它允许应用程序编码为使用Log4j 1.2 API代替使用Log4j 2.&#34;

好吧,我发现应用程序的jar是使用以前版本的log4j开发的。所以我包括了 log4j-1.2-api-2.8.jar 并删除了 log4j-jcl-2.8.jar commons-logging.jar 这就是诀窍。现在应用程序的日志消息被发送到配置为appender的文件。

也许值得一提的是,添加 log4j-1.2-api-2.8.jar 之后的第一次测试没有用,所以我想它与罐子有点冲突我后来删除了。