【问题标题】:tomcat 7 internal logging with log4j2.xml带有 log4j2.xml 的 tomcat 7 内部日志记录
【发布时间】:2015-04-11 08:04:01
【问题描述】:

我正在尝试使用 log4j2 配置 tomcat 7 内部日志记录。我已按照Logging server classes in Tomcat 6 with log4j2 提供的答案进行操作。

我正在使用 tomcat 7.0.54 和 log4j-core-2.1.jarlog4j-api-2.1.jar。 我已经下载了附加组件并执行了以下所有步骤,但是当我启动 tomcat 时,出现错误:

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

这些是我执行的步骤:

  • log4j2.xml 放入$CATALINA_BASE/lib
  • 从“附加”下载tomcat-juli.jartomcat-juli-adapters.jar
  • log4j-api-2.1.jarlog4j-core-2.1.jarlog4j-jul-2.1.jartomcat-juli-adapters.jar 从“附加”放入$CATALINA_HOME/lib
  • $CATALINA_HOME/bin/tomcat-juli.jar 替换为“附加”中的tomcat-juli.jar
  • 删除$CATALINA_BASE/conf/logging.properties
  • 将日志管理器设置为使用来自log4j2-jul 网桥(log4j-jul-2.1.jar) 的管理器。修改catalina.sh,确保classpath包含bin/tomcat-juli.jarlib/log4j-jul-2.1.jarlib/log4j-api-2.1.jarlib/log4j-core-2.1.jar,启动tomcat的命令包括 -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager`

我什至尝试在catalina.sh 中添加这个 (LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_HOME/lib/log4j2.xml") 但没有奏效。

如果有人可以成功配置,请告诉我。

【问题讨论】:

    标签: tomcat logging log4j2 tomcat-juli


    【解决方案1】:

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

    1. 将以下 jar 放入 $CATALINA_HOME/lib
      • log4j 2 核 (log4j-core-2.4.1.jar)
      • log4j 2 api (log4j-api-2.4.1.jar)
      • log4j 2 桥用于 log4 j 1.0 (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 documentation 设置 log4J 1.X,但改用 log4j2 工件。此外,此解决方案不需要对 $CATALINA_HOME/bin/catalina.sh 或任何其他文件 $CATALINA_HOME/bin 进行任何更改

    【讨论】:

    【解决方案2】:

    我的错误,我需要在类路径中包含$CATALINA_BASE/lib 才能获取log4j2.xml

    【讨论】:

    • 为什么必须在类路径中添加 $CATALINA_BASE/lib?根据文档,$CATALINA_BASE/lib 或 $CATALINA_BASE/bin 中的库应该优先于 $CATALINA_HOME/lib 或 $CATALINA_HOME/bin 中的库。因此,不需要向类路径添加任何内容,类路径应该根据 $CATALINA_BASE 的定义正确构建。话虽这么说,我对 Tomcat 8 也有同样的问题。我收到以下错误:无法加载 Logmanager "org.apache.logging.log4j.jul.LogManager" java.lang.ClassNotFoundException: ...
    • 事实上,您可以为 log4j 定义 LOGGING_CONFIG 变量,而不是设置 CLASSPATH:LOGGING_CONFIG="-Dlog4j.configurationFile=${CATALINA_BASE}/conf/log4j2.xml" 如果您的配置文件是 ${CATALINA_BASE}/conf/log4j2.xml。
    【解决方案3】:

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

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

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

    (对于 Windows 使用副本)

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

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="OFF">
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="LOGJ2 %d [%-6p] %c{1} – %m%n"/>
            </Console>
        </Appenders>
        <Loggers>
            <Logger name="*" level="trace">
                <AppenderRef ref="Console"/>
            </Logger>
    
            <Root level="info">
                <appenderRef ref="Console" level="info"/>
            </Root>
        </Loggers>
    </Configuration>
    

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

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

    #The environment variable CLASSPATH is unset in catalina.sh/catalina.bat
    CLASSPATH=/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
    JAVA_OPTS=-Dlog4j.configurationFile=/opt/tomcat/conf/log4j2.xml
    LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
    

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

    LOGJ2 2017-10-12 08:47:37,797 [INFO  ] VersionLoggerListener – Server built:          Sep 28 2017 10:30:11 UTC
    LOGJ2 2017-10-12 08:47:37,797 [INFO  ] VersionLoggerListener – Server number:         8.5.23.0
    LOGJ2 2017-10-12 08:47:37,797 [INFO  ] VersionLoggerListener – OS Name:               Linux
    LOGJ2 2017-10-12 08:47:37,797 [INFO  ] VersionLoggerListener – OS Version:            4.4.0-93-generic
    LOGJ2 2017-10-12 08:47:37,797 [INFO  ] VersionLoggerListener – Architecture:          amd64
    

    【讨论】:

      【解决方案4】:

      添加以下提到的罐子对我有用

      Apache Tomcat/7.0.70

      1. /tomcat/lib/log4j-core-2.13.3.jar
      2. /tomcat/lib/log4j-api-2.13.3.jar
      3. /tomcat/lib/log4j-1.2-api-2.13.3.jar(esapi 工作所需 流)

      /tomcat/bin/setenv.sh

      LOG_PARAMS="-Dlog4j.configurationFile=file:///tomcat/conf/log4j2.xml"
      

      /tomcat/conf/log4j2.xml

      <?xml version="1.0" encoding="UTF-8"?>
      
      <Configuration>
      
         <!-- ================================= -->
         <!-- Preserve messages in a local file -->
         <!-- ================================= -->
      
         <Appenders>
            <!-- A time/date based rolling appender -->
            <RollingFile name="FILE" fileName="../logs/server.log" 
                     filePattern="../logs/server.log.%d{yyyy-MM-dd}" append="true">
               <PatternLayout>
                  <pattern>%d %-5p [%c] [%t] [%x] %m%n</pattern>
               </PatternLayout>
               <Policies>
                  <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
               </Policies>
            </RollingFile>
      
         </Appenders>
      
         <Loggers>
      
         <!-- ======================= -->
         <!-- Setup the Root category -->
         <!-- ======================= -->
      
            <Root>
               <AppenderRef ref="FILE" level="debug"/>
            </Root>
      
         </Loggers>
      </Configuration>

      【讨论】:

        猜你喜欢
        • 2014-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-22
        • 2021-11-19
        • 1970-01-01
        • 1970-01-01
        • 2014-11-13
        相关资源
        最近更新 更多