我正在追踪一些并发问题,在登录到控制台时,让每个线程的输出行以不同的颜色非常有用。我在OS X上。可以使用转换模式输出一些控制代码,还是需要自定义appender?谁知道怎么做?
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的行应该有不同的颜色。
答案 0 :(得分:41)
您可以使用MulticolorLayout
中的jcabi-log。将此依赖项添加到项目中:
<dependency>
<groupId>com.jcabi</groupId>
<artifactId>jcabi-log</artifactId>
<version>0.17.1</version>
</dependency>
然后在log4j.properties
中配置它:
log4j.rootLogger=INFO, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=com.jcabi.log.MulticolorLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%color{%p}] %c: %m%n
log4j.xml
:
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="com.jcabi.log.MulticolorLayout">
<param name="ConversionPattern" value="[%color{%p}] %m%n" />
</layout>
</appender>
在此示例中,%p
将替换为DEBUG
,INFO
,ERROR
等,然后绘制为与日志记录级别相关的颜色。除此之外,您还可以使用自己的颜色或预定义的颜色,例如:
log4j.appender.CONSOLE.layout.ConversionPattern=[%p] $color-cyan{%c}: %color-red{%m}%n
log4j.appender.CONSOLE.layout.ConversionPattern=[%p] $color-0;0;31{%c}: %m%n
有关ANSI colors的更多文档。
答案 1 :(得分:24)
您可以延长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
由Ingo Thon实施。只是要添加,也许你也可以通过在MDC中设置一个带有随机ANSI颜色代码的变量“randColor”来实现这一点,例如,在Filter
中,并在{{1}中使用它在log4j的控制台appender配置中标准conversionPattern
:
org.apache.log4j.PatternLayout