我在 $CATALINA_HOME/lib 下有 log4j2 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。
您只需将 log4j2-api、log4j2-core 和 log4j2-appserver 库添加到 Tomcat 类路径中,提供 log4j2 配置文件并从安装中删除 $CATALINA_BASE/conf/logging.properties。
这最容易通过以下方式完成:
在catalina home中创建一组名为log4j2/lib的目录并 log4j2/conf.
放置
log4j2-api-2.x.x.jar
、log4j2-core-2.x.x.jar
和
log4j2-appserver-2.x.x.jar
在log4j2/lib目录中。
创建名为 log4j2-tomcat.xml、log4j2-tomcat.json 的文件, log4j2-tomcat.yaml、log4j2-tomcat.yml 或 log4j2-tomcat.properties 在 log4j2/conf 目录中。
在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://logging.apache.org/log4j/2.x/log4j-appserver/index.html
我知道现在回答这个问题有点晚了,但我确信它可以帮助像我一样努力配置 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。
在
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
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就在那里。
问题在于
$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,但不包含此目录本身。