一尘不染

使Log4j控制台附加程序对不同的线程使用不同的颜色

java

我正在跟踪一些并发问题,在登录到控制台时,使每个线程的输出行具有不同的颜色将非常有帮助。我在OS
X上。是否可以使用转换模式输出一些控制代码来完成此操作,或者需要自定义附加程序?有人知道吗?

2011-10-21 12:14:42,859 ["http-bio-8080"-exec-9] DEBUG ...
2011-10-21 12:14:43,198 ["http-bio-8080"-exec-10] DEBUG ...

exec-9和exec-10的行应使用不同的颜色。


阅读 224

收藏
2020-09-08

共1个答案

一尘不染

您可以扩展PatternLayout和覆盖format(ILoggingEvent)。您可以在那里查看LoggingEvent.getThreadName()基于线程名称的颜色(奇/偶,也许?)。

为了将颜色输出到控制台,您需要使用ANSI Escape
Sequence

例如,要输出红色文本:

  "\u001b["  // Prefix - see [1]
+ "0"        // Brightness
+ ";"        // Separator
+ "31"       // Red foreground
+ "m"        // Suffix
+ text       // the text to output
+ "\u001b[m " // Prefix + Suffix to reset color

这里有一些例子:

只需添加一下,也许您也可以通过在MDC中设置带有随机ANSI颜色代码的变量“ randColor”(例如在中)Filter,并
在log4j的控制台附加程序配置conversionPattern的标准org.apache.log4j.PatternLayout中使用它来实现此目的:

<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
               value="\u001b[0;%X{randColor}m ....... \u001b[m" />
    </layout>
</appender>
2020-09-08