我正在跟踪一些并发问题,在登录到控制台时,使每个线程的输出行具有不同的颜色将非常有帮助。我在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的行应使用不同的颜色。
您可以扩展PatternLayout和覆盖format(ILoggingEvent)。您可以在那里查看LoggingEvent.getThreadName()基于线程名称的颜色(奇/偶,也许?)。
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
这里有一些例子:
ColoredPatternLayout
只需添加一下,也许您也可以通过在MDC中设置带有随机ANSI颜色代码的变量“ randColor”(例如在中)Filter,并 在log4j的控制台附加程序配置conversionPattern的标准org.apache.log4j.PatternLayout中使用它来实现此目的:
Filter
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>