我希望使用log4j2从我的Web应用程序和服务器(tomcat 6)本身进行日志记录,最好是全部记录到同一文件。我拥有的配置适用于Web应用程序,但不适用于服务器类。
我想要的是将类似以下内容的行写入文件(它们目前仅写入控制台)
Aug 15, 2014 1:03:24 PM org.apache.coyote.http11.Http11Protocol start INFO: Starting Coyote HTTP/1.1 on http-80 Aug 15, 2014 1:03:24 PM org.apache.catalina.startup.Catalina start INFO: Server startup in 1287 ms
我在tomcat / lib目录中有log4j-api-2.0.1.jar,log4j-core-2.0.1.jar和log4j2.xml。简化的log4j2.xml如下所示。我通过status =“ all”看到的信息中没有任何问题。log4j2会自动设置自身-我没有通过CATALINA_OPTS传入configurationFile。
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="all"> <Appenders> <RollingFile name="R" fileName="../logs/general.log" filePattern="../logs/general-%d{yyyy-MM-dd}.log" append="true"> <PatternLayout> <Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy /> </Policies> <DefaultRolloverStrategy max="1000"/> </RollingFile> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="R" level="info"/> <AppenderRef ref="STDOUT" level="error"/> </Root> </Loggers> </Configuration>
知道我在做什么错吗?
在回答这个问题并重新访问它之间,我升级到了tomcat8。这就是我设法使其工作的方式。此方法需要log4j2的版本2.1,并且在某种程度上假定您已经使其适用于Web应用程序。指令假定CATALINA_HOME和CATALINA基数不是分开的
基于http://tomcat.apache.org/tomcat-8.0-doc/logging.html#Using_Log4j
我添加的额外步骤是将日志记录管理器设置为使用log4j2-jul桥(log4j-jul-2.1.jar)中的管理器。更改catalina.bat或catalina.sh以确保类路径包括bin / tomcat-juli.jar,lib / log4j-jul-2.1.jar,lib / log4j-api-2.1.jar和lib / log4j-core-2.1。 jar,用于启动tomcat的命令包括
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager