Dan*_*dev 6 web-applications log4j2 tomcat8
我正在 Tomcat 8.0.24 上将 Web 服务部署为 Web 应用程序 (war)。应用程序 jar 已经过测试,并且运行良好。现在,出于配置和测试 log4j 的目的,我引发了运行时错误(没有连接数据库)。
我正在尝试将 log4j2 设置为仅用于应用程序日志记录(不适用于 tomcat),并且我正在使用 Netbeans 8.0.2 来构建 war。
我已在类路径中包含以下 jar:
log4j-api-2.8.jar
log4j-core-2.8.jar
log4j-web-2.8.jar
log4j-jcl-2.8.jar
commons-logging.jar
Run Code Online (Sandbox Code Playgroud)
WEB-INF 中的 log4j2.xml,仅配置根记录器来捕获来自 Web 应用程序的所有内容:
log4j-api-2.8.jar
log4j-core-2.8.jar
log4j-web-2.8.jar
log4j-jcl-2.8.jar
commons-logging.jar
Run Code Online (Sandbox Code Playgroud)
我还配置了 catalina.properties,以防万一,覆盖默认的 jarsToSkip:
tomcat.util.scan.StandardJarScanFilter.jarsToScan=log4j-core*.jar,log4j-taglib*.jar,log4j-api*.jar,log4j-web*.jar,log4j-jcl*.jar`
Run Code Online (Sandbox Code Playgroud)
我相信 log4j 已正确初始化为 catalina*.log 状态,因为 status="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.
Run Code Online (Sandbox Code Playgroud)
还因为创建了日志文件。
但是,来自应用程序(Web 服务 jar)的所有运行时错误消息都以 catalina*.log 结尾,而不是我配置的文件附加程序。此外,catalina*.log 中的那些错误消息不遵循 Appenders 定义中定义的任何模式,因此基本上看起来 log4j2 被忽略了。
我究竟做错了什么?
在 log4j 的文档中,我发现“组件”下有一个log4j 1.2 API,它指出“允许使用 Log4j 1.2 API 编码的应用程序改为使用 Log4j 2”。
嗯,我发现应用程序的 jar 是使用以前版本的 log4j 开发的。因此,我包含了log4j-1.2-api-2.8.jar并删除了log4j-jcl-2.8.jar和 commons-logging.jar,这样就成功了。现在应用程序的日志消息被发送到配置为附加程序的文件。
也许值得一提的是,添加log4j-1.2-api-2.8.jar后的第一次测试不起作用,所以我想这与我后来删除的 jar 产生了某种冲突。