You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Log4J2如何将LOG_ROOT日志内容同时输出到文件和控制台?

解决方案

有两种简单的方式实现需求,推荐第一种更简洁的方案:

方式一:使用复合追加器(Composite Appender)

创建一个包含原滚动文件追加器(LOG_ROOT)和控制台追加器的复合追加器,让所有日志记录器引用这个复合追加器,即可实现日志同时输出到文件和控制台。

  1. 定义控制台追加器,和LOG_ROOT使用完全一致的输出格式:
appender.CONSOLE.type = Console
appender.CONSOLE.name = CONSOLE
appender.CONSOLE.layout.type = PatternLayout
appender.CONSOLE.layout.charset = UTF-8
appender.CONSOLE.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5p - (%F:%L) %m%n
  1. 定义复合追加器,将LOG_ROOT和控制台追加器组合:
appender.LOG_AND_CONSOLE.type = Composite
appender.LOG_AND_CONSOLE.name = LOG_AND_CONSOLE
appender.LOG_AND_CONSOLE.appenders = LOG_ROOT CONSOLE
  1. 修改所有引用LOG_ROOT的日志记录器,改为引用这个复合追加器:
  • 修改rootLogger配置:
rootLogger.appenderRef.stdout.ref = LOG_AND_CONSOLE
  • 修改其他自定义logger(如org.hibernate.SQL):
logger.ORG_HIBERNATE_SQL.appenderRef.rolling.ref = LOG_AND_CONSOLE

方式二:给每个日志记录器添加控制台追加器引用

如果不想调整原有追加器结构,可直接给每个使用LOG_ROOT的日志记录器添加控制台追加器的引用:

  1. 先定义控制台追加器(配置同方式一):
appender.CONSOLE.type = Console
appender.CONSOLE.name = CONSOLE
appender.CONSOLE.layout.type = PatternLayout
appender.CONSOLE.layout.charset = UTF-8
appender.CONSOLE.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5p - (%F:%L) %m%n
  1. 修改rootLogger,新增控制台追加器的引用:
rootLogger.appenderRef.stdout.ref = LOG_ROOT
rootLogger.appenderRef.console.ref = CONSOLE
  1. 修改其他自定义logger,新增控制台追加器的引用:
logger.ORG_HIBERNATE_SQL.name = org.hibernate.SQL
logger.ORG_HIBERNATE_SQL.level = INFO
logger.ORG_HIBERNATE_SQL.additivity = false
logger.ORG_HIBERNATE_SQL.appenderRef.rolling.ref = LOG_ROOT
logger.ORG_HIBERNATE_SQL.appenderRef.console.ref = CONSOLE

两种方式都能让原本输出到LOG_ROOT的日志,完全同步输出到控制台,格式和内容与文件日志保持一致。


内容的提问来源于stack exchange,提问作者user10931326

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:13:10