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

丹德夫

我正在通过Tomcat 8.0.24将Web服务作为Web应用程序部署(战争)。应用程序jar已通过测试,并且可以正常工作。现在出于配置和测试log4j的目的,我引发了运行时错误(未连接任何数据库)。

我试图将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 

还有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`

我相信由于status =“ TRACE”,log4j已正确初始化为catalina * .log状态:

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定义中定义的任何模式,因此基本上看来log4j2被忽略了。

我究竟做错了什么?

丹德夫

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

好吧,我发现应用程序的jars是使用log4j的早期版本开发的。因此,我包括了log4j-1.2-api-2.8.jar并删除了log4j-jcl-2.8.jarcommons-logging.jar,从而达到了目的。现在,应用程序的日志消息将发送到配置为附加程序的文件。

也许值得一提的是,添加log4j-1.2-api-2.8.jar后的第一个测试无法正常工作,因此我想这与后来删除的jar有点冲突。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在log4j2中配置空附加程序

如何在Tomcat中为单个Web应用程序设置时区?

将带有Equinox Servle Bridge的OSGi应用程序部署到Tomcat时,如何配置Log4J?

如何在Glassfish 3中为每个已部署的应用程序配置log4j?

如何为Spring Boot2应用程序提供特定于env的log4j2配置

如何在Spring Boot应用程序中正确使用log4j2

Tomcat Web应用程序中log4j2.xml文件的正确位置

如何:将Tomcat 9配置为通过Log4j2进行记录

Log4j 2无法在Spring 2.5 Tomcat应用程序中写入日志

如何在log4j2中实现“ configureAndWatch”

Log4j2:如何在Yaml配置中配置具有相同类型的多个Appender

如何为WildFly 9中部署的应用程序设置Log4j2?

如何在控制台应用程序中禁用log4j2的自动初始化?

如何使用Tomcat 8.5.15配置log4j2

log4j2无法登录部署在tomcat上的Web应用程序

如何在Tomcat中配置应用程序会话的最大持续时间?

如何在Tomcat 8中将HTML文件与Web应用程序一起部署?

如何在Java / GWT Web应用程序中实现Log4j-audit

如何在我的javafx应用程序中设置log4j?

如何在此Grizzly / Jersey应用程序中启用log4j

如何在log4j2中更改htmllayout

如何在log4j2中配置StatisticsCsvLayout

如何在Web应用程序中查找log4j2的属性参数?

如何将Log4j配置为使用Hibernate的Java Web应用程序?

如何在JBoss Web Server中将应用程序从Tomcat8映射到Apache?

使用log4j-web.jar在Web应用程序中配置Log4j2

如何在tomcat中设置log4j2文件夹?

如何在 Web 应用程序之外定义任意文件来配置 log4j2

如何通过从 spring-boot 中的 bootstrap.yml 获取名称来在 log4j2 中记录应用程序名称?