Dav*_*ker 39 java console log4j
我正在追踪一些并发问题,在登录到控制台时,让每个线程的输出行以不同的颜色非常有用.我在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 ...
Run Code Online (Sandbox Code Playgroud)
exec-9和exec-10的行应该是不同的颜色.
yeg*_*256 44
您可以使用MulticolorLayout从jcabi日志.将此依赖项添加到项目中:
<dependency>
<groupId>com.jcabi</groupId>
<artifactId>jcabi-log</artifactId>
<version>0.17.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后配置它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
Run Code Online (Sandbox Code Playgroud)
同样在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>
Run Code Online (Sandbox Code Playgroud)
在这个例子中,%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
Run Code Online (Sandbox Code Playgroud)
有关ANSI颜色的更多文档.
Xav*_*ica 26
您可以扩展PatternLayout和覆盖format(ILoggingEvent).在那里你可以看一下LoggingEvent.getThreadName()根据线程名称得到一些颜色(奇数/偶数,也许?).
要将颜色输出到控制台,您需要使用ANSI转义序列.
例如,要输出红色文本:
"\u001b[" // Prefix - see [1]
+ "0" // Brightness
+ ";" // Separator
+ "31" // Red foreground
+ "m" // Suffix
+ text // the text to output
+ "\u001b[m " // Prefix + Suffix to reset color
Run Code Online (Sandbox Code Playgroud)
这里有一些例子:
ColoredPatternLayout 由Ingo Thon实施.我想补充,也许你也可以通过在MDC变量"randColor"设置一个随机的ANSI颜色代码,例如,在实现这一目标Filter,并使用它在conversionPattern一个标准的org.apache.log4j.PatternLayout 在你的log4j的控制台appender的配置:
<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>
Run Code Online (Sandbox Code Playgroud)