使用log4j2.xml进行tomcat 7内部日志记录

Par*_*jee 11 logging tomcat log4j2 tomcat-juli

我正在尝试配置tomcat 7内部日志记录log4j2.我已经跟踪了Tomcat 6中使用log4j2Logging服务器类中提供的答案.

我使用Tomcat 7.0.54,和log4j-core-2.1.jar,log4j-api-2.1.jar.我已经下载了额外的内容,并完成了以下所有步骤,但是当我启动tomcat时,我收到一个错误:

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Run Code Online (Sandbox Code Playgroud)

这些是我执行的步骤:

  • log4j2.xml$CATALINA_BASE/lib
  • 下载tomcat-juli.jartomcat-juli-adapters.jar从"额外"
  • log4j-api-2.1.jar,log4j-core-2.1.jar,log4j-jul-2.1.jar,并tomcat-juli-adapters.jar从"额外"进入$CATALINA_HOME/lib.
  • 替换$CATALINA_HOME/bin/tomcat-juli.jartomcat-juli.jar从"临时演员".
  • 删除 $CATALINA_BASE/conf/logging.properties
  • 设置日志记录管理器以使用log4j2-julbridge(log4j-jul-2.1.jar)中的管理器.改变catalina.sh,以确保类路径包括bin/tomcat-juli.jar,lib/log4j-jul-2.1.jar,lib/log4j-api-2.1.jarlib/log4j-core-2.1.jar,以及用来启动Tomcat的命令包括-Djava.util.logging.manager = org.apache.logging.log4j.jul.LogManager`

我甚至尝试添加这个(LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_HOME/lib/log4j2.xml")catalina.sh但是没有用.

如果有人能成功配置,请告诉我.

小智 8

我采取了以下步骤,它对我有用.

  1. 将以下jar放入$ CATALINA_HOME/lib中
    • log4j 2 core(log4j-core-2.4.1.jar)
    • log4j 2 api(log4j-api-2.4.1.jar)
    • 用于log4 j 1.0的log4j 2桥(log4j-1.2-api-2.4.1.jar)
    • 来自tomcat extras的tomcat-juli-adapters.jar
  2. 用来自tomcat extras的tomcat-juli.jar替换现有的$ CATALINA_HOME/bin/tomcat-juli.jar
  3. 删除文件$ CATALINA_HOME/conf/logging.properties
  4. 将新的log4j 2配置文件(log4j2.xml)放在$ CATALINA_HOME/lib中

诀窍是遵循官方的tomcat 7文档来设置log4J 1.X,而是使用log4j2工件.此解决方案也不需要在$ CATALINA_HOME/bin/catalina.sh或任何其他文件$ CATALINA_HOME/bin中进行任何更改

  • 完美的!我将这些步骤与此 log4j2.xml 结合使用:https://gist.github.com/bmaupin/475a0cd6e8b374d876f5085846761fb6 (3认同)

Par*_*jee 5

我的错误,我需要$CATALINA_BASE/lib在classpath中包含log4j2.xml以便被拾取.

  • 实际上,如果你的配置文件是$ {CATALINA_BASE}/conf,你可以像log4j一样定义LOGGING_CONFIG变量,而不是设置CLASSPATH:LOGGING_CONFIG =" - Dlog4j.configurationFile = $ {CATALINA_BASE} /conf/log4j2.xml". /log4j2.xml. (2认同)

rjd*_*olb 5

编辑,我这里有一个使用 Docker 的更清晰的示例。

\n

根据您的安装情况调整以下内容:

\n

我的 Tomcat 8.5.x 位于 /opt/tomcat/

\n

1.将log4j2 jar文件复制到/opt/tomcat/lib/

\n\n

(对于 Windows 使用副本)

\n

2.创建/opt/tomcat/conf/log4j2.xml

\n
<?xml version="1.0" encoding="UTF-8"?>\n<Configuration status="OFF">\n    <Appenders>\n        <Console name="Console" target="SYSTEM_OUT">\n            <PatternLayout pattern="LOGJ2 %d [%-6p] %c{1} \xe2\x80\x93 %m%n"/>\n        </Console>\n    </Appenders>\n    <Loggers>\n        <Logger name="*" level="trace">\n            <AppenderRef ref="Console"/>\n        </Logger>\n        \n        <Root level="info">\n            <appenderRef ref="Console" level="info"/>\n        </Root>\n    </Loggers>\n</Configuration>\n
Run Code Online (Sandbox Code Playgroud)\n

3. 创建或编辑 /opt/tomcat/bin/setenv.sh 或 /opt/tomcat/bin/setenv.bat

\n

如果没有在 setenv.sh/bat 中设置 CLASSPATH,初始 Tomcat 引导加载程序将无法访问类 org.apache.logging.log4j.jul.LogManager 和 log4j2 类。在启动 Tomcat 之前设置 CLASSPATH 不会影响初始 Tomcat 引导加载程序,因为 catalina.sh/bat在运行 setenv.sh/bat 之前取消设置 CLASSPATH

\n
#The environment variable CLASSPATH is unset in catalina.sh/catalina.bat\nCLASSPATH=/opt/tomcat/lib/log4j-api-2.9.1.jar:/opt/tomcat/lib/log4j-core-2.9.1.jar:/opt/tomcat/lib/log4j-jul-2.9.1.jar\nJAVA_OPTS=-Dlog4j.configurationFile=/opt/tomcat/conf/log4j2.xml\nLOGGING_MANAGER=-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager\n
Run Code Online (Sandbox Code Playgroud)\n

4. 查看 /opt/tomcat/log/catalina.out 中的日志并注意 log42.xml 中的 LOGJ2 前缀

\n
LOGJ2 2017-10-12 08:47:37,797 [INFO  ] VersionLoggerListener \xe2\x80\x93 Server built:          Sep 28 2017 10:30:11 UTC\nLOGJ2 2017-10-12 08:47:37,797 [INFO  ] VersionLoggerListener \xe2\x80\x93 Server number:         8.5.23.0\nLOGJ2 2017-10-12 08:47:37,797 [INFO  ] VersionLoggerListener \xe2\x80\x93 OS Name:               Linux\nLOGJ2 2017-10-12 08:47:37,797 [INFO  ] VersionLoggerListener \xe2\x80\x93 OS Version:            4.4.0-93-generic\nLOGJ2 2017-10-12 08:47:37,797 [INFO  ] VersionLoggerListener \xe2\x80\x93 Architecture:          amd64\n
Run Code Online (Sandbox Code Playgroud)\n