目标
Log4j 2 同时输出日志到控制台和文件。
方案
给同一个 logger 绑定一个 console appender 和一个 file appender。
即类似于这样的形式:
rootLogger.appenderRef.stdout.ref = STDOUT
rootLogger.appenderRef.file.ref = LOGFILE
实例
源码:https://github.com/HustLion/java_console_file_log4j
- 新建一个 log4j 2 项目。并在
App.java
中写上相应的 log 代码。可参考:Eclipse 建立 Log4j 2 的 Hello World 项目(使用 properties 文件) 在
log4j2.properties
中加入以下内容# 建立名称为 console 和 file 的两个 appender name=PropertiesConfig property.filename = logs appenders = console, file # 设置两个 appender 的参数,其中 name 是用于之后的 ref 的 # 首先是 console appender appender.console.type = Console appender.console.name = STDOUT appender.console.layout.type = PatternLayout appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n # 然后是 File appender, 输出路径是 ${filename}/propertieslogs.log # filename 在前面已经设定为 logs # 所以输出日志文件是在当前项目根目录下的 logs/propertieslogs.log appender.file.type = File appender.file.name = LOGFILE appender.file.fileName=${filename}/propertieslogs.log appender.file.layout.type=PatternLayout appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n # 设置 rootLogger 的记录级别,将 console 和 file 绑定到 rootLogger 上。 rootLogger.level = debug rootLogger.appenderRef.stdout.ref = STDOUT rootLogger.appenderRef.file.ref = LOGFILE
运行项目,命令行输出与当前目录下的
logs/propertieslogs.log
都是以下内容[ERROR] 2017-05-28 12:12:12.376 [main] - Logged by root logger: Hello this is an error [INFO ] 2017-05-28 12:12:12.378 [main] - Logged by root logger: Hello World! [DEBUG] 2017-05-28 12:12:12.379 [main] - Logged by root logger: Hello debug message.