Log4j2仅配置文件Appender却输出至控制台的问题解决
解决Log4j2日志同时输出到文件和控制台的问题
问题根源
你遇到的问题核心是未配置Root Logger:Log4j2在检测到无Root Logger配置时,会自动生成一个默认Root Logger(级别为ERROR,绑定Console Appender);同时自定义Logger的additivity属性默认值为true,会将日志传递给父Logger(即Root Logger),所以ERROR级别的日志会同时通过自定义Logger输出到文件,以及默认Root Logger输出到控制台。
解决方案
方案一:关闭自定义Logger的日志传递性(推荐)
修改log4j2.properties,给自定义Logger添加additivity=false配置,阻止日志向上传递到Root Logger:
appender.file.type = File appender.file.name = fileLogger appender.file.fileName=ExampleClass.log appender.file.layout.type = PatternLayout appender.file.layout.Pattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n logger.ExampleClass.name = ExampleClass logger.ExampleClass.level = trace logger.ExampleClass.additivity = false # 新增:关闭日志传递 logger.ExampleClass.appenderRef.file.ref = fileLogger
此配置仅针对ExampleClass的日志生效,避免Root Logger的默认控制台输出。
方案二:配置Root Logger,禁用控制台输出
直接配置Root Logger,两种可选方式:
方式1:让Root Logger也输出到文件(适合需要Root处理其他类日志的场景)
appender.file.type = File appender.file.name = fileLogger appender.file.fileName=ExampleClass.log appender.file.layout.type = PatternLayout appender.file.layout.Pattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n logger.ExampleClass.name = ExampleClass logger.ExampleClass.level = trace logger.ExampleClass.appenderRef.file.ref = fileLogger # 配置Root Logger输出到文件 rootLogger.level = error rootLogger.appenderRef.file.ref = fileLogger
方式2:彻底禁用Root Logger
appender.file.type = File appender.file.name = fileLogger appender.file.fileName=ExampleClass.log appender.file.layout.type = PatternLayout appender.file.layout.Pattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n logger.ExampleClass.name = ExampleClass logger.ExampleClass.level = trace logger.ExampleClass.appenderRef.file.ref = fileLogger # 禁用Root Logger的所有输出 rootLogger.level = off
内容的提问来源于stack exchange,提问作者mbmast
相关产品推荐
相关产品推荐

