log4j2.xml 未加载配置文件
log4j2.xml config file is not being loaded
我已将 log4j 从 1.2.17 升级到 2.16.0。因此我不得不重写 log4j.xml
并将其重命名为 log4j2.xml
。我已经进行了必要的更改。但是似乎我的新配置没有加载。我尝试通过 web.xml
:
配置 log4j
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>classpath:log4j2.xml</param-value>
</context-param>
和-Dlog4j2.configurationFile
。这两种方法都失败了,我没有在 mylog.log 文件中获得任何日志。但是,当 运行 本地应用程序时,控制台会显示日志。
这是我的 log4j2.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="trace">
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%-5p %c{1} - %m%n"/>
</Console>
<RollingFile name="DAILY_LOG" fileName="${catalina.base}/logs/mylog.log"
filePattern="${catalina.base}/logs/mylog.log.%d{yyyy-MM-dd}">
<PatternLayout pattern="%d %-5p [%c] [%X{sid}:%X{uid}] %m%n "/>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<!-- Limit the org.springframework category to INFO as its DEBUG is verbose -->
<Logger name="org.springframework" level="INFO"/>
<!-- Limit the org.hibernate category to INFO as its DEBUG is verbose -->
<Logger name="org.hibernate" level="INFO"/>
<!-- Limit the org.apache category to INFO as its DEBUG is verbose -->
<Logger name="org.apache" level="INFO"/>
<Logger name="org.myproject" level="INFO"/>
<!-- Root Logger -->
<Root level="INFO">
<AppenderRef ref="STDOUT"/>
<AppenderRef ref="DAILY_LOG"/>
</Root>
</Loggers>
</Configuration>
我尝试使用以下方法调试 log4j 配置:-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=trace
。我注意到 LoggerContext 实例创建得很好,所有列出的记录器也构建得很好。
请问是不是我的配置写错了。有人可以向我证实或否认这一点吗?
我找到了解决办法。这花了我一段时间才弄清楚。问题是由于 log4j 2.x
用于解析系统属性的新语法。与使用 ${some.property}
语法替换 属性 的 log4j 1.x
不同,log4j 2.x
使用 ${sys:some.property}
。我必须添加 sys
前缀才能使其正常工作。
来源:https://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution
我已将 log4j 从 1.2.17 升级到 2.16.0。因此我不得不重写 log4j.xml
并将其重命名为 log4j2.xml
。我已经进行了必要的更改。但是似乎我的新配置没有加载。我尝试通过 web.xml
:
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>classpath:log4j2.xml</param-value>
</context-param>
和-Dlog4j2.configurationFile
。这两种方法都失败了,我没有在 mylog.log 文件中获得任何日志。但是,当 运行 本地应用程序时,控制台会显示日志。
这是我的 log4j2.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="trace">
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%-5p %c{1} - %m%n"/>
</Console>
<RollingFile name="DAILY_LOG" fileName="${catalina.base}/logs/mylog.log"
filePattern="${catalina.base}/logs/mylog.log.%d{yyyy-MM-dd}">
<PatternLayout pattern="%d %-5p [%c] [%X{sid}:%X{uid}] %m%n "/>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<!-- Limit the org.springframework category to INFO as its DEBUG is verbose -->
<Logger name="org.springframework" level="INFO"/>
<!-- Limit the org.hibernate category to INFO as its DEBUG is verbose -->
<Logger name="org.hibernate" level="INFO"/>
<!-- Limit the org.apache category to INFO as its DEBUG is verbose -->
<Logger name="org.apache" level="INFO"/>
<Logger name="org.myproject" level="INFO"/>
<!-- Root Logger -->
<Root level="INFO">
<AppenderRef ref="STDOUT"/>
<AppenderRef ref="DAILY_LOG"/>
</Root>
</Loggers>
</Configuration>
我尝试使用以下方法调试 log4j 配置:-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=trace
。我注意到 LoggerContext 实例创建得很好,所有列出的记录器也构建得很好。
请问是不是我的配置写错了。有人可以向我证实或否认这一点吗?
我找到了解决办法。这花了我一段时间才弄清楚。问题是由于 log4j 2.x
用于解析系统属性的新语法。与使用 ${some.property}
语法替换 属性 的 log4j 1.x
不同,log4j 2.x
使用 ${sys:some.property}
。我必须添加 sys
前缀才能使其正常工作。
来源:https://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution