强调文本我正在将 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",
你的帮助很重要