log4j2 RollingFile Appender 需要日期模式
Posted
技术标签:
【中文标题】log4j2 RollingFile Appender 需要日期模式【英文标题】:log4j2 RollingFile Appender requires date pattern 【发布时间】:2013-12-17 06:04:34 【问题描述】:我在 log4j2 中定义了一个 RollingFile Appender
<RollingFile name="Locserver" append="true" fileName="locserver.log" filePattern="locserver-%i.log">
<PatternLayout>
<pattern>%dISO8601 [%t] %p %c %L - %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="50 MB"></SizeBasedTriggeringPolicy>
<DefaultRolloverStrategy>10</DefaultRolloverStrategy>
</Policies>
</RollingFile>
但是当我尝试运行它时,我得到一个错误
IllegalStateException : 模式不包含日期 org.apache.logging.log4j.core.appender.rolling.PatternProcessor.getNExtTime(PatternProcessor.java:91)
只要我在 filePattern 中放入日期模式,例如locserver-%dMM-dd-yyyy-%i.log
,这种情况就会消失。但我不想要日志名称中的日期。是我的配置有错误还是有什么问题?
【问题讨论】:
【参考方案1】:谢谢乔。 我终于想通了。
我的策略列表中有一个空的 TimeBasedTriggeringPolicy 标记,它强制在 filePattern 中检查日期。一旦我删除它,它就开始正常工作了。
【讨论】:
【参考方案2】:在 RollingFile appender 中,TimeBasedTrigerringPolicy 检查标记的 filepattern 属性中的 datepattern。使用 TimeBasedTrigerringPolicy 时必须指定 datepattern。
将包含 SimpleDate 模式的 %d...
放在 filePattern
中,例如:
<Appenders>
<RollingFile name="RollingFile" fileName="logs/rpi_gpio_latest.log"
filePattern="logs/**%dyyyy-MM-dd_HH**_rpi_gpio_%i.log">
<PatternLayout>
<Pattern>%dHH:mm:ss.SSS [%t] %-5level %logger36 - %msg%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="4 MB"/>
</Policies>
<DefaultRolloverStrategy fileIndex="max"/>
</RollingFile>
</Appenders>
【讨论】:
【参考方案3】:对我来说,这就像here 描述的那样工作(使用 log4j 2.0-beta9 和 Java 1.7)。
我的log4j.xml
(大小策略设置为 1kB 仅用于测试):
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%t] %C2 (%F:%L) - %m%n"/>
</Console>
<RollingFile name="Logfile"
fileName="Log/App.log"
filePattern="Log/App-%i.log">
<PatternLayout pattern="%d %-5p [%t] %C2 (%F:%L) - %m%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="1 KB"/>
</Policies>
<DefaultRolloverStrategy max="4"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="STDOUT"/>
<AppenderRef ref="Logfile"/>
</Root>
</Loggers>
</Configuration>
在使用您的配置片段时它也有效(我刚刚更正了 DefaultRolloverStrategy 设置):
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%t] %C2 (%F:%L) - %m%n"/>
</Console>
<RollingFile name="Locserver"
append="true"
fileName="locserver.log"
filePattern="locserver-%i.log">
<PatternLayout>
<pattern>%dISO8601 [%t] %p %c %L - %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="50 MB"></SizeBasedTriggeringPolicy>
</Policies>
<DefaultRolloverStrategy max="4"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="eeo.tts" level="debug"/>
<Root level="info">
<AppenderRef ref="STDOUT"/>
<AppenderRef ref="Locserver"/>
</Root>
</Loggers>
</Configuration>
您使用的是哪个版本的 log4j2?
【讨论】:
以上是关于log4j2 RollingFile Appender 需要日期模式的主要内容,如果未能解决你的问题,请参考以下文章
234期说说Log4j2中RollingFile的文件滚动更新机制
291期你了解Log4j2中RollingFile的文件滚动更新机制吗?
Log4j2 - Unable to invoke factory method in class org.apache.logging.log4j.core.appender.RollingFile
在 log4j2 中启用 LZMA(2)(即 `.xz`)压缩