Log4j 1.2.17迁移至2.20.0:RollingFile配置异常修复咨询
问题原因与修复方案
为什么会报错?
Log4j2的RollingFileAppender是专门为日志滚动场景设计的组件,它强制要求配置filePattern(滚动后日志文件的命名规则)和至少一个触发滚动的Policies(比如按大小、时间触发)。和Log4j1.x的RollingFileAppender逻辑不同,Log4j2里这两个参数是必填项,不设置就会触发ConfigurationException。
修复方法
如果你不需要日志自动滚动,直接使用**File Appender**替代RollingFileAppender即可。File Appender的作用就是将日志写入单个固定文件,完全不需要滚动相关的配置。
修改后的log4j2.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <!-- 使用File Appender替代RollingFileAppender,无需滚动配置 --> <File name="FileAppender" fileName="logs/app.log"> <PatternLayout> <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> </PatternLayout> </File> </Appenders> <Loggers> <Root level="trace"> <AppenderRef ref="FileAppender"/> </Root> </Loggers> </Configuration>
特殊场景补充(如果需要手动滚动)
如果你的需求是平时不自动滚动,但需要支持手动触发日志滚动,那还是得用RollingFileAppender,但需要配置一个永远不会自动触发的策略,同时指定filePattern:
<RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%i.log"> <PatternLayout> <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> </PatternLayout> <!-- 设置一个极大的阈值,确保不会自动触发滚动 --> <Policies> <SizeBasedTriggeringPolicy size="100 TB"/> </Policies> </RollingFile>
这种情况下,日志只会在你手动调用滚动API时才会生成新文件,平时一直写入app.log。
内容的提问来源于stack exchange,提问作者Dhanusha_Perera07
相关产品推荐
相关产品推荐

