如何使用Tomcat 8.5.15配置log4j2

问题描述 投票:0回答:5

我在 $CATALINA_HOME/lib 下有 log4j2 jar:

  • log4j-api-2.10.0.jar
  • log4j-core-2.10.0.jar
  • log4j-jul-2.10.0.jar

导出 JAVA_OPTS="${JAVA_OPTS} -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager"

在catalina.properties中,我有通用的类加载器,我尝试再次添加log4j-jul-2.10.0.jar,即使它已经位于CATALINA_HOME/lib下,但没有成功。

common.loader="${catalina.base}/lib","${catalina.base}/lib/.jar","${catalina.home}/lib","${catalina.home}/ lib/.jar","/opt/tomcat/apache-tomcat-8.5.15/lib/log4j-jul-2.10.0.jar"

我已经删除了Tomcat下的logging.properties,并在路径中添加了新的log4j2.xml

错误信息:

无法加载Logmanager“org.apache.logging.log4j.jul.LogManager” java.lang.ClassNotFoundException:org.apache.logging.log4j.jul.LogManager

知道为什么 LogManager 仍然缺失,还是我应该使用其他 jar 来代替。在另一条消息中,他们说的是 juli.jar 和 extras,但在他们的例子中,他们有较旧的 Tomcat 版本,6 或 7。

java tomcat log4j log4j2 catalina
5个回答
3
投票

您只需将 log4j2-apilog4j2-corelog4j2-appserver 库添加到 Tomcat 类路径中,提供 log4j2 配置文件并从安装中删除 $CATALINA_BASE/conf/logging.properties。

这最容易通过以下方式完成:

  1. 在catalina home中创建一组名为log4j2/lib的目录并 log4j2/conf.

  2. 放置

    log4j2-api-2.x.x.jar
    log4j2-core-2.x.x.jar
    log4j2-appserver-2.x.x.jar
    在log4j2/lib目录中。

  3. 创建名为 log4j2-tomcat.xml、log4j2-tomcat.json 的文件, log4j2-tomcat.yaml、log4j2-tomcat.yml 或 log4j2-tomcat.properties 在 log4j2/conf 目录中。

  4. 在tomcat bin目录下创建或修改setenv.sh以包含

    CLASSPATH=$CATALINA_HOME/log4j2/lib/*:$CATALINA_HOME/log4j2/conf


您可以通过更改环境变量 LOGGING_MANAGER 来强制使用 JUL 框架的应用程序使用 log4j2 格式。您可以通过添加 setenv.sh 文件来完成此操作:

LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager"

请记住,

org.apache.logging.log4j.jul.LogManager
包含在
log4j-jul-2.x.x.jar
桥中,必须将其添加到您的类路径中。


参考资料:

https://db-blog.web.cern.ch/blog/luis-rodriguez-fernandez/2019-03-keeping-your-logs-clean-apache-tomcat-9-log4j2-and-spring-boot

https://logging.apache.org/log4j/2.x/log4j-appserver/index.html


2
投票

我知道现在回答这个问题有点晚了,但我确信它可以帮助像我一样努力配置 tomcat 以使其使用 lo4j 的人。 过去3天我一直在做类似的事情,我发现tomcat网站提供的extras文件夹不是我需要的。但是,您仍然可以使用 Maven 来获取它们。我能够配置 tomcat,以便它使用提到的 jar 文件( tomcat-extras-juli.jar 和 tomcat-extras-juli-adapters.jar )。只需记住包含 VM 参数 -Dlog4j.debug 即可让您的生活更轻松并更快地捕获错误。

Maven 仓库:https://mvnrepository.com/artifact/org.apache.tomcat.extras/tomcat-extras-juli-adapters

在包含 tomcat 存储库提供的提到的 jar 后,我遇到了同样的问题。经过快速分析,我发现接口 org.apache.juli.WebAppProperties 未包含在文件 org.apache.catalina.loader.WebappClassLoaderBase 使用的 jar 文件 tomcat-extras-juli.jar 中。经过更多研究后,我意识到 tomcat jar 文件包含在 Maven Repo 中。我在同一版本的 tomcat (当前为 8.5 )下下载了提到的 jar 文件,将这些 jar 插入到我的 tomcat 安装中,一切都按预期工作。现在我的tomcat版本使用log4j而不是juli。


2
投票

tomcat\bin\
文件
setenv.bat
中创建并添加到文件:

set "CLASSPATH=%CLASSPATH%%CATALINA_BASE%\bin;%CATALINA_BASE%\bin\log4j-core-2.10.0.jar;%CATALINA_BASE%\bin\log4j-api-2.10.0.jar;%CATALINA_BASE%\bin\log4j-jul-2.10.0.jar"

复制 jar 文件

log4j-api-2.10.0.jar 
log4j-core-2.10.0.jar 
log4j-jul-2.10.0.jar

到文件夹

tomcat\bin\

log4j2.xml
文件夹
中创建文件
tomcat\bin


1
投票

log4j2 jars
必须与
bootstrap.jar
(tomcat 启动)和
tomcat-juli.jar
(日志记录)一起加载

这些 jar 存在于

CATALINA_HOME/bin
目录中,负责 tomcat 的初始化,包括日志记录。

CATALINA_HOME/cataline.bat
如果是 Windows,您会发现以下代码 -

set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar"

在这里,您应该在类路径中添加log4j2 jar,以便当tomcat启动时,这些jar就在那里。


0
投票

问题在于

$CATALINA_BASE/lib
的内容是 Common 类加载器的一部分,但早期需要记录类,因此必须是 System 类加载器的一部分。请参阅Tomcat 类加载器操作方法

我建议在

log4j
下创建一个新的
$CATALINA_HOME
目录,将 log4j 配置文件和 jar 放在那里,然后使用
setenv.sh
(或 Windows 下的
setenv.bat
)将其添加到类路径中:

$ ls $CATALINA_HOME/log4j
log4j2.xml
log4j-api-2.22.0.jar
log4j-core-2.22.0.jar
log4j-jul-2.22.0.jar
$ cat $CATALINA_HOME/bin/setenv.sh 
LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager"
CLASSPATH="${CATALINA_HOME}/log4j/*:${CATALINA_HOME}/log4j"

注意:类路径条目

${CATALINA_HOME}/log4j/*
是一个 Class Path Wild Cards,其中包含
${CATALINA_HOME}/log4j
内的所有 jar,但不包含此目录本身。

© www.soinside.com 2019 - 2024. All rights reserved.