问完这个问题后,我又花了一些时间来设置 log4j2,这就是log4j2.xml
我想出的文件。它模仿配置
描述于使用Log4j登录Tomcat http://tomcat.apache.org/tomcat-8.0-doc/logging.html#Using_Log4j。它使用多个记录器来路由消息
分隔日志文件。
<?xml version="1.0" encoding="utf-8"?>
<Configuration status="info">
<Properties>
<Property name="logdir">${sys:catalina.base}/logs</Property>
<Property name="layout">%d [%t] %-5p %c- %m%n</Property>
</Properties>
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="${layout}"/>
</Console>
<RollingFile name="CATALINA"
fileName="${logdir}/catalina.log"
filePattern="${logdir}/catalina.%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="${layout}"/>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="1 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
<RollingFile name="LOCALHOST"
fileName="${logdir}/localhost.log"
filePattern="${logdir}/localhost.%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="${layout}"/>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="1 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
<RollingFile name="MANAGER"
fileName="${logdir}/manager.log"
filePattern="${logdir}/manager.%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="${layout}"/>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="1 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
<RollingFile name="HOST-MANAGER"
fileName="${logdir}/host-manager.log"
filePattern="${logdir}/host-manager.%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="${layout}"/>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="1 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="CATALINA"/>
</Root>
<Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost]"
level="info" additivity="false">
<AppenderRef ref="LOCALHOST"/>
</Logger>
<Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]"
level="info" additivity="false">
<AppenderRef ref="MANAGER"/>
</Logger>
<Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]"
level="info" additivity="false">
<AppenderRef ref="HOST-MANAGER"/>
</Logger>
</Loggers>
</Configuration>
然而,要让它正常工作需要得到
一堆其他文件
配置正确。这tomcat 7 使用 log4j2.xml 进行内部日志记录 https://stackoverflow.com/questions/28446085/tomcat-7-internal-logging-with-log4j2-xmlParamita Banerjee 的发帖对此很有帮助。
这个文件进入CATALINA_HOME/bin/
:
如果您从 Maven 存储库中提取此文件,您将获得一个文件
命名为类似的东西tomcat-extras-juli-8.0.15.jar
(当前的
我写这篇文章时的版本)。但是,需要将其重命名为tomcat-juli.jar
– Tomcat 安装脚本在中使用该名称
设置 CLASSPATH。
这些文件进入CATALINA_HOME/lib/
:
commons-logging-1.2.jar
log4j-1.2-api-2.1.jar
log4j-api-2.1.jar
log4j-core-2.1.jar
log4j-jcl-2.1.jar
log4j-jul-2.1.jar
log4j-web-2.1.jar
tomcat-juli-adapters-8.0.15.jar
log4j-web-2.1.jar
这里可能不需要(它可能只需要与您的 Web 应用程序一起部署)——它的使用描述于在 Web 应用程序中使用 Log4j 2 http://logging.apache.org/log4j/2.x/manual/webapp.html.
log4j-1.2-api-2.1.jar
仅当您有使用的应用程序时才需要
较旧的 log4j 1.2 接口。
In CATALINA_BASE/conf
,我禁用了logging.properties
.
我用了以下setenv.sh
脚本来定义CLASSPATH
and
LOGGING_MANAGER
Tomcat 的环境变量正确。它可以进入CATALINA_BASE/bin
或进入CATALINA_HOME/bin
。 (我把它放入CATALINA_HOME
/bin。)如果是,则由 Tomcat 的启动脚本执行
展示。您可能更喜欢简单的东西,但这符合
启动脚本的样式。
LOG4J_JARS="log4j-core-2.1.jar log4j-api-2.1.jar log4j-jul-2.1.jar"
# make log4j2.xml available
if [ ! -z "$CLASSPATH" ] ; then CLASSPATH="$CLASSPATH": ; fi
CLASSPATH="$CLASSPATH""$CATALINA_BASE"/lib
# Add log4j2 jar files to CLASSPATH
for jar in $LOG4J_JARS ; do
if [ -r "$CATALINA_HOME"/lib/"$jar" ] ; then
CLASSPATH="$CLASSPATH":"$CATALINA_HOME"/lib/"$jar"
else
echo "Cannot find $CATALINA_HOME/lib/$jar"
echo "This file is needed to properly configure log4j2 for this program"
exit 1
fi
done
# use the logging manager from log4j-jul
LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager"
正如尼克在他的回复中提到的,还有输出到
访问日志。我也没有尝试对此做任何事情。
我希望其他人觉得这很有用。回想起来,似乎很漂亮
直截了当。然而,有很多部分必须
“恰到好处”才能发挥作用,这是一个挑战(至少对于
新手)。