如何使用 Tomcat 8.5.15 配置 log4j2
How to configure log4j2 with Tomcat 8.5.15
我在 $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 和其他内容,但在他们的情况下,他们使用的是旧的 Tomcat 版本,6 或 7。
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 就在那里。
在 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"
复制 jars 文件
log4j-api-2.10.0.jar
log4j-core-2.10.0.jar
log4j-jul-2.10.0.jar
到文件夹 tomcat\bin\
在 tomcat\bin
文件夹
中创建文件 log4j2.xml
我知道现在回答这个问题有点晚了,但我相信它可以帮助像我一样努力配置 tomcat 以便它使用 lo4j 的人。
过去三天我一直在做类似的事情,我发现 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 的存储库提供的提到的 jars 后遇到了同样的问题。经过快速分析后,我发现接口 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。
你只需要添加 log4j2-api, log4j2-core 和 log4j2- appserver 库到 Tomcat 类路径中,提供 log4j2 配置文件并从安装中删除 $CATALINA_BASE/conf/logging.properties。
这最容易通过以下方式完成:
在 catalina 主目录中创建一组名为 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 目录中。
在tomcatbin目录下创建或修改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
我在 $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 和其他内容,但在他们的情况下,他们使用的是旧的 Tomcat 版本,6 或 7。
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 就在那里。
在 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"
复制 jars 文件
log4j-api-2.10.0.jar
log4j-core-2.10.0.jar
log4j-jul-2.10.0.jar
到文件夹 tomcat\bin\
在 tomcat\bin
文件夹
log4j2.xml
我知道现在回答这个问题有点晚了,但我相信它可以帮助像我一样努力配置 tomcat 以便它使用 lo4j 的人。 过去三天我一直在做类似的事情,我发现 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 的存储库提供的提到的 jars 后遇到了同样的问题。经过快速分析后,我发现接口 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。
你只需要添加 log4j2-api, log4j2-core 和 log4j2- appserver 库到 Tomcat 类路径中,提供 log4j2 配置文件并从安装中删除 $CATALINA_BASE/conf/logging.properties。
这最容易通过以下方式完成:
在 catalina 主目录中创建一组名为 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 目录中。
在tomcatbin目录下创建或修改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