Log4j2配置中RollingFile Appender不生效及配置规则咨询
问题解答
是的,必须将Appender通过<appender-ref>关联到<Loggers>块中的Logger(包括Root Logger),日志才会输出到对应的文件。
Log4j2的配置逻辑很明确:
<Appenders>块只是定义日志输出的规则(比如文件路径、滚动策略、日志格式),相当于提前准备好“日志容器”;<Loggers>块负责指定哪些日志(按包名/类名划分的Logger)要把日志发送到哪些“容器”里。如果某个Appender没有被任何Logger引用,它就不会被启用,自然不会生成日志文件。
看你的配置,第二个Appendername="DATACAPTURE"对应的test2.log没有日志,核心原因就是你在<Loggers>里完全没引用它。
修复方案
你可以根据需求选择以下两种方式之一:
方式1:让Root Logger同时输出到两个Appender
修改<Root>节点,添加对DATACAPTURE的引用:
<Root level="info"> <AppenderRef ref="dataCapture" /> <AppenderRef ref="DATACAPTURE" /> </Root>
这样所有符合info级别及以上的日志,会同时输出到test1.log和test2.log。
方式2:给特定Logger关联第二个Appender
比如如果想让com.rest.db.fetch的日志同时输出到两个文件,修改对应的logger节点:
<logger name="com.rest.db.fetch" level="info" additivity="false"> <appender-ref ref="dataCapture" /> <appender-ref ref="DATACAPTURE" /> </logger>
额外注意点
你的配置里两个RollingFile的filePattern属性末尾多了一个多余的双引号(filePattern="${LOG_DIR}/test1.%i.log.gz""),这会导致配置解析报错,记得删掉多余的引号,改成:
filePattern="${LOG_DIR}/test1.%i.log.gz"
和
filePattern="${LOG_DIR}/test2.%i.log.gz"
内容的提问来源于stack exchange,提问作者Manohar Nr
相关产品推荐
相关产品推荐

