我正在 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 被忽略了。
我究竟做错了什么?