0

强调文本我正在将 log4j 版本从 1.2.17 迁移到 Log4j2,作为迁移的一部分,我根据指南选择了桥接选项,同时为 RollingFile 迁移 log4j.xml 到 log4j2.xml 我们有属性来替换文件创建如下

     <RollingFile name="file"
        fileName="${log.directory}server.log.${log.id}server.log"
        filePattern="${log.directory}server.log.${log.id}server.log">
        <PatternLayout pattern="%d{ISO8601} %-5p (%t %X{RequestId} %X{CallerId}) [%c{1}] %m%n" />
        <Policies>
            <SizeBasedTriggeringPolicy size="5000 KB" />
        </Policies>
        <DefaultRolloverStrategy max="5" />
    </RollingFile>
  

并且这些变量在执行启动期间编写的自定义(com.MyCustomListener)之一后得到解决,此流程与 log4j 1.2.17 一样正常工作。使用 log4j2 根据 apache 提供的 规范,log4j2 的自动初始化在服务器启动期间自动发生,由于服务器启动时的这种自动初始化,我解析变量的侦听器在 log4j 初始化后执行,结果变量没有解析,我正在使用servlet 版本 4.0 我尝试通过在 web.xml 的开头添加以下内容来禁用自动初始化

            <context-param>
                <param-name>isLog4jAutoInitializationDisabled</param-name>
                <param-value>true</param-value>
            </context-param>

但这仍然对我没有帮助,log4j2 初始化是在我执行之前发生的,我希望在 log4j2 初始化之前先执行。

            <?xml version="1.0" encoding="UTF-8"?>
            <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                xmlns="http://java.sun.com/xml/ns/javaee" 
                xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
                xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
                id="WebApp_ID" version="2.5">
                
                <display-name>MyApplication</display-name>
                
                 <listener>
                    <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
                </listener>
             
                <filter>
                    <filter-name>log4jServletFilter</filter-name>
                    <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
                </filter>
                <filter-mapping>
                    <filter-name>log4jServletFilter</filter-name>
                    <url-pattern>/*</url-pattern>
                    <dispatcher>REQUEST</dispatcher>
                    <dispatcher>FORWARD</dispatcher>
                    <dispatcher>INCLUDE</dispatcher>
                    <dispatcher>ERROR</dispatcher>
                </filter-mapping>
                
                <context-param>
                  <param-name>isLog4jAutoInitializationDisabled</param-name>
                  <param-value>true</param-value>
                </context-param>

                <!-- init properties shared by entire application -->
                <context-param>
                    <param-name>earDeploymentDescriptorPath</param-name>
                    <param-value>application.xml</param-value>
                </context-param>
                <listener>
                    <listener-class>com.MyCustomListener</listener-class>
                </listener>
                
                <!-- bootstrap Log4j -->
                <!-- Log4j refresh interval -->
                <context-param>
                    <param-name>log4jRefreshInterval</param-name>
                    <param-value>60000</param-value>
                </context-param>
                <context-param>
                    <param-name>log4jExposeWebAppRoot</param-name>
                    <param-value>false</param-value>
                </context-param>
                
                <!-- welcome file list-->
                <welcome-file-list>
                    <welcome-file>index.html</welcome-file>
                </welcome-file-list>
                
            </web-app>

我已经为 log4j2 启用了 TRACE 日志,从日志中我观察到 log4j 在我的自定义侦听器(com.MyCustomListener)之前初始化

*2021-05-19 05:11:49,314 INFO [stdout] (ServerService 线程池 -- 71) 2021-05-19 05:11:49,314 ServerService 线程池 -- 71 TRACE TypeConverterRegistry 初始化。2021-05-19 05:11:49,314 INFO [stdout](ServerService 线程池 -- 71) 2021-05-19 05:11:49,314 ServerService 线程池 -- 71 DEBUG PluginManager 'TypeConverter' 找到 26 个插件 2021-05- 19 05:11:49,330 INFO [stdout] (ServerService 线程池 -- 71) 2021-05-19 05:11:49,330 ServerService 线程池 -- 71 DEBUG PatternLayout$Builder(pattern="%d{ISO8601} %-5p (%t) [%c{1}] %m%n", PatternSelector=null, 配置(vfs:/C:/SL3/CPS_EMR_ALL/jboss/standalone/deployments/PracticeEAR.ear/lib/Practice.jar/log4j2 .xml), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null") 2021-05-19 05:11:49,330 INFO [stdout] (ServerService 线程池 -- 71) 2021-05-19 05:11:49,330 ServerService 线程池 -- 71 DEBUG PluginManager 'Converter' 找到 46 个插件 2021-05-19 05:11:49,330 INFO [stdout] (ServerService Thread Pool -- 71) 2021-05-19 05:11:49,330 ServerService 线程池 -- 71 DEBUG Building Plugin[名称=appender,类=org.apache.logging.log4j.core.appender.ConsoleAppender]。2021-05-19 05:11:49,345 INFO [stdout] (ServerService 线程池 -- 71) 2021-05-19 05:11:49,345 ServerService 线程池 -- 71 DEBUG ConsoleAppender$Builder(target="SYSTEM_OUT", 跟随="null", direct="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%d{ISO8601} %-5p (%t) [%c{1}] %m%n), name="console", Configuration(vfs:/C:/SL3/CPS_EMR_ALL/jboss/standalone/deployments /PracticeEAR.ear/lib/Practice.jar/log4j2.xml), Filter=null, ={}) 2021-05-19 05:11:49,345 INFO [stdout] (ServerService 线程池 -- 71) 2021-05- 19 05:11:49,345 ServerService 线程池 -- 71 调试启动 OutputStreamManager SYSTEM_OUT.false.false 2021-05-19 05:11:49,345 INFO [stdout] (ServerService 线程池 -- 71) 2021-05-19 05:11 :49,345 ServerService 线程池 -- 71 DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout]。2021-05-19 05:11:49,345 INFO [stdout] (ServerService 线程池 -- 71) 2021-05-19 05:11:49,345 ServerService 线程池 -- 71 DEBUG PatternLayout$Builder(pattern="%d{ISO8601 } %-5p (%t %X{RequestId} %X{CallerId}) [%c{1}] %m%n",

你的帮助很重要

4

0 回答 0