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

Log4j配置未实现日志分色输出问题求助

解决Log4j多Appender日志颜色不生效的问题

看起来你遇到的问题是多个ConsoleAppender重复输出同一条日志,导致颜色被后续Appender的重置指令覆盖,所以所有日志都显示成黑色。我来帮你分析下原因和解决办法:

问题根源

你的配置给每个日志级别单独配了一个ConsoleAppender,但高等级日志会被多个Appender同时处理:

  • 比如ERROR级别的日志,不仅会被StdoutErrorFatal(threshold=ERROR)处理,还会被StdoutWarn(threshold=WARN,包含ERROR)、StdoutInfo(threshold=INFO,包含ERROR)这些Appender输出
  • 而StdoutInfo的格式开头是\u001b[0m,这个ANSI指令会把控制台颜色重置为默认黑色,所以前面Appender输出的红色会被覆盖,最终显示成黑色

另外,你的LevelRangeFilter配置虽然限制了min和max为同一级别,但缺少拒绝不匹配日志的收尾过滤器,导致还是可能有其他日志漏进来。

修正后的配置方案

我们需要确保每个Appender只处理对应级别的日志,添加收尾过滤器拒绝所有不匹配的日志,避免重复输出。这里推荐用LevelMatchFilter替代LevelRangeFilter(因为你是匹配单一级别),同时给每个Appender加上DenyAllFilter:

log4j.debug=false
# Default level is INFO
log4j.rootLogger=INFO,StdoutErrorFatal,StdoutWarn,StdoutInfo,StdoutDebug,StdoutTrace
# and for com.some.package.* log everything
log4j.logger.com.some.package=TRACE

# ERROR级别Appender
log4j.appender.StdoutErrorFatal=org.apache.log4j.ConsoleAppender
log4j.appender.StdoutErrorFatal.layout=org.apache.log4j.PatternLayout
log4j.appender.StdoutErrorFatal.layout.conversionPattern=\u001b[31;1m%d{HH:mm:ss,SSS} %-5p - %-26c - [user:%X{username}] %m\n
log4j.appender.StdoutErrorFatal.threshold=ERROR
# 仅匹配ERROR级别
log4j.appender.StdoutErrorFatal.filter.filter1=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.StdoutErrorFatal.filter.filter1.levelToMatch=ERROR
log4j.appender.StdoutErrorFatal.filter.filter1.acceptOnMatch=true
# 拒绝所有不匹配的日志
log4j.appender.StdoutErrorFatal.filter.filter2=org.apache.log4j.varia.DenyAllFilter

# WARN级别Appender
log4j.appender.StdoutWarn=org.apache.log4j.ConsoleAppender
log4j.appender.StdoutWarn.layout=org.apache.log4j.PatternLayout
log4j.appender.StdoutWarn.layout.conversionPattern=\u001b[33;1m%d{HH:mm:ss,SSS} %-5p - %-26c - [user:%X{username}] %m\n
log4j.appender.StdoutWarn.threshold=WARN
log4j.appender.StdoutWarn.filter.filter1=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.StdoutWarn.filter.filter1.levelToMatch=WARN
log4j.appender.StdoutWarn.filter.filter1.acceptOnMatch=true
log4j.appender.StdoutWarn.filter.filter2=org.apache.log4j.varia.DenyAllFilter

# INFO级别Appender
log4j.appender.StdoutInfo=org.apache.log4j.ConsoleAppender
log4j.appender.StdoutInfo.layout=org.apache.log4j.PatternLayout
log4j.appender.StdoutInfo.layout.conversionPattern=\u001b[0m%d{HH:mm:ss,SSS} %-5p - %-26c - [user:%X{username}] %m\n
log4j.appender.StdoutInfo.threshold=INFO
log4j.appender.StdoutInfo.filter.filter1=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.StdoutInfo.filter.filter1.levelToMatch=INFO
log4j.appender.StdoutInfo.filter.filter1.acceptOnMatch=true
log4j.appender.StdoutInfo.filter.filter2=org.apache.log4j.varia.DenyAllFilter

# DEBUG级别Appender
log4j.appender.StdoutDebug=org.apache.log4j.ConsoleAppender
log4j.appender.StdoutDebug.layout=org.apache.log4j.PatternLayout
log4j.appender.StdoutDebug.layout.conversionPattern=\u001b[0;36m%d{HH:mm:ss,SSS} %-5p - %-26c - [user:%X{username}] %m\n
log4j.appender.StdoutDebug.threshold=DEBUG
log4j.appender.StdoutDebug.filter.filter1=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.StdoutDebug.filter.filter1.levelToMatch=DEBUG
log4j.appender.StdoutDebug.filter.filter1.acceptOnMatch=true
log4j.appender.StdoutDebug.filter.filter2=org.apache.log4j.varia.DenyAllFilter

# TRACE级别Appender(补充原配置未完成的部分)
log4j.appender.StdoutTrace=org.apache.log4j.ConsoleAppender
log4j.appender.StdoutTrace.layout=org.apache.log4j.PatternLayout
log4j.appender.StdoutTrace.layout.conversionPattern=\u001b[0;35m%d{HH:mm:ss,SSS} %-5p - %-26c - [user:%X{username}] %m\n
log4j.appender.StdoutTrace.threshold=TRACE
log4j.appender.StdoutTrace.filter.filter1=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.StdoutTrace.filter.filter1.levelToMatch=TRACE
log4j.appender.StdoutTrace.filter.filter1.acceptOnMatch=true
log4j.appender.StdoutTrace.filter.filter2=org.apache.log4j.varia.DenyAllFilter

额外检查点

  • 确保你的终端支持ANSI转义码:Windows CMD默认不支持,建议用PowerShell或者Windows Terminal;Linux/macOS终端一般都支持
  • 如果还是有颜色残留问题,可以在每个日志格式的末尾加上\u001b[0m,避免颜色污染后续日志

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:12:46