如何配置log4j2.properties实现双Appender不同日志级别输出?
配置Log4j2实现不同级别日志分输出到控制台和文件
我来帮你搞定这个配置!要实现控制台只输出INFO及以上、文件只输出ERROR及以上日志,核心是给每个Appender单独加上级别过滤器,让它们各自过滤掉不符合级别的日志。下面是完整可运行的配置示例,我会逐部分解释清楚:
完整的log4j2.properties配置
# Log4j2自身的日志级别,设为error避免输出过多调试信息 status = error name = PropertiesConfig # -------------------------- 控制台Appender配置 -------------------------- appender.console.type = Console appender.console.name = ConsoleAppender # 日志格式配置,可根据需求调整 appender.console.layout.type = PatternLayout appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n # 关键:添加级别过滤器,只允许INFO及以上级别的日志通过 appender.console.filter.threshold.type = ThresholdFilter appender.console.filter.threshold.level = INFO # -------------------------- 文件Appender配置 -------------------------- appender.file.type = File appender.file.name = FileAppender # 日志文件路径,可根据项目需求修改 appender.file.fileName = logs/app-error.log # 日志格式配置,和控制台保持一致或自定义 appender.file.layout.type = PatternLayout appender.file.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n # 关键:添加级别过滤器,只允许ERROR及以上级别的日志通过 appender.file.filter.threshold.type = ThresholdFilter appender.file.filter.threshold.level = ERROR # -------------------------- 根Logger配置 -------------------------- # 根Logger级别设为TRACE(最低级别),确保不会提前过滤日志,让Appender自己的过滤器生效 rootLogger.level = TRACE # 关联控制台Appender rootLogger.appenderRef.console.ref = ConsoleAppender # 关联文件Appender rootLogger.appenderRef.file.ref = FileAppender
关键配置说明
- ThresholdFilter(级别过滤器):这是实现需求的核心,每个Appender通过这个过滤器指定允许通过的最低日志级别。控制台设为
INFO,所以DEBUG及以下会被过滤;文件设为ERROR,所以WARN、INFO、DEBUG都会被过滤。 - 根Logger级别:一定要设为
TRACE(或比两个Appender过滤级别都低的级别),这样能确保所有日志都能传递到Appender,由Appender自己决定是否输出,避免根Logger提前过滤掉符合Appender要求的日志。 - 日志格式:
PatternLayout里的pattern可以根据你的需求调整,比如添加线程ID、日志来源类名等。
注意事项
- 确保项目依赖的Log4j2版本为2.x系列(这个配置在2.0及以上版本都能正常工作)
- 检查日志文件路径
logs/app-error.log的写入权限,Log4j2会自动创建不存在的目录 - 如果不需要Log4j2自身的日志,可以把
status设为off
内容的提问来源于stack exchange,提问作者Claudiu
相关产品推荐
相关产品推荐

