【问题标题】:How to configure log4j2 with Tomcat 8.5.15如何使用 Tomcat 8.5.15 配置 log4j2
【发布时间】:2018-03-15 12:35:50
【问题描述】:

我在 $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 中,我有 common 类加载器,我尝试再次添加 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

错误消息:

无法加载日志管理器“org.apache.logging.log4j.jul.LogManager” java.lang.ClassNotFoundException: org.apache.logging.log4j.jul.LogManager

知道为什么 LogManager 仍然丢失,或者我应该改用其他一些 jar。在另一条消息中,他们说的是 juli.jar 和额外内容,但在他们的情况下,他们使用的是旧 Tomcat 版本,6 或 7。

【问题讨论】:

    标签: java tomcat log4j log4j2 catalina


    【解决方案1】:

    我知道现在回答这个问题有点晚了,但我相信它可以帮助像我一样努力配置 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】:

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

      这很容易做到:

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

      2. 放置 log4j2-api-2.x.x.jarlog4j2-core-2.x.x.jarlog4j2-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


      您可以强制使用 JUL 框架的应用程序使用 log4j2 格式更改环境变量 LOGGING_MANAGER。您可以通过添加 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

      【讨论】:

        【解决方案3】:

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

        这些 jars 存在于CATALINA_HOME/bin 目录中,并负责 初始化tomcat,包括日志记录。

        CATALINA_HOME/cataline.bat,如果是windows,你会发现下面的代码-

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

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

        【讨论】:

        【解决方案4】:

        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\

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

        【讨论】:

          猜你喜欢
          • 2017-12-25
          • 1970-01-01
          • 1970-01-01
          • 2013-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-07
          相关资源
          最近更新 更多