log4j实现日志同时输出至独立文件与控制台的配置问题
Log4j日志同时输出到独立文件和控制台解决方案
问题根因
- 你为
successLogger和failureLogger配置了log4j.additivity.xxx=false,关闭了日志向上传递的特性,两个自定义logger产生的日志只会输出到自身绑定的文件appender,不会传递给父级rootLogger绑定的控制台appender,所以无法打印到控制台。 - 你的控制台appender配置存在拼写错误:原配置中
log4j.appender.toConsoleAppender.layout.ConversionPattern前缀错误,你定义的控制台appender名称为toConsole,需要修正前缀才能让控制台格式配置生效。
实现方案
场景1:日志写入对应文件的同时同步打印到控制台
两种实现方式选其一即可,无需修改原有Java调用代码:
方式A:开启日志传递性(推荐,配置更简洁)
修改自定义logger的additivity配置为true,让日志向上传递到rootLogger触发控制台输出,完整配置如下:
# Define the root logger log4j.rootLogger = DEBUG, toConsole # Define the console appender (修正拼写错误) log4j.appender.toConsole=org.apache.log4j.ConsoleAppender log4j.appender.toConsole.layout=org.apache.log4j.PatternLayout log4j.appender.toConsole.layout.ConversionPattern=%d{HH:mm:ss} %5p [%t] - %c.%M - %m%n # Define the success file appender log4j.appender.success=org.apache.log4j.FileAppender log4j.appender.success.File=logs/success.log log4j.appender.success.Append=false log4j.appender.success.layout=org.apache.log4j.PatternLayout log4j.appender.success.layout.conversionPattern=%d{HH:mm:ss} %5p [%t] - %c.%M - %m%n # Define the failure file appender log4j.appender.failure=org.apache.log4j.FileAppender log4j.appender.failure.File=logs/failure.log log4j.appender.failure.Append=false log4j.appender.failure.layout=org.apache.log4j.PatternLayout log4j.appender.failure.layout.conversionPattern=%d{HH:mm:ss} %5p [%t] - %c.%M - %m%n # 开启additivity允许日志向上传递到rootLogger log4j.category.successLogger=DEBUG, success log4j.additivity.successLogger=true log4j.category.failureLogger=WARN, failure log4j.additivity.failureLogger=true
方式B:直接为自定义logger绑定控制台appender
如果不想受rootLogger其他配置影响,可以保留additivity=false,直接把控制台appender加到自定义logger的输出列表中:
# 基础配置和上面完全一致,仅修改logger部分如下 log4j.category.successLogger=DEBUG, success, toConsole log4j.additivity.successLogger=false log4j.category.failureLogger=WARN, failure, toConsole log4j.additivity.failureLogger=false
场景2:仅符合success.log写入条件的日志打印到控制台
只需调整logger绑定的appender列表,不给failureLogger绑定控制台appender即可,配置如下:
# 基础配置和之前一致,仅logger部分修改为: log4j.category.successLogger=DEBUG, success, toConsole log4j.additivity.successLogger=false log4j.category.failureLogger=WARN, failure log4j.additivity.failureLogger=false
内容的提问来源于stack exchange,提问作者vigneshwar reddy
相关产品推荐
相关产品推荐

