Log4J2如何将LOG_ROOT日志内容同时输出到文件和控制台?
解决方案
有两种简单的方式实现需求,推荐第一种更简洁的方案:
方式一:使用复合追加器(Composite Appender)
创建一个包含原滚动文件追加器(LOG_ROOT)和控制台追加器的复合追加器,让所有日志记录器引用这个复合追加器,即可实现日志同时输出到文件和控制台。
- 定义控制台追加器,和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
- 定义复合追加器,将LOG_ROOT和控制台追加器组合:
appender.LOG_AND_CONSOLE.type = Composite appender.LOG_AND_CONSOLE.name = LOG_AND_CONSOLE appender.LOG_AND_CONSOLE.appenders = LOG_ROOT CONSOLE
- 修改所有引用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的日志记录器添加控制台追加器的引用:
- 先定义控制台追加器(配置同方式一):
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
- 修改rootLogger,新增控制台追加器的引用:
rootLogger.appenderRef.stdout.ref = LOG_ROOT rootLogger.appenderRef.console.ref = CONSOLE
- 修改其他自定义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
相关产品推荐
相关产品推荐

