使log4j控制台appender为不同的线程使用不同的颜色

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

您可以使用MulticolorLayoutjcabi日志.将此依赖项添加到项目中:

<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)

这里有一些例子:

我想补充,也许你也可以通过在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)

[1] "\ u001B [J"代表什么?

  • 登录控制台时"[...]不同的颜色****[...]" (5认同)
  • [在Macos终端上工作的提示]要获得更多颜色,你可以这样做:`\ u001b [0; 38; 2; 233; 235; 235m ....你的文字....\u001b [m`详见https ://en.wikipedia.org/wiki/ANSI_escape_code并搜索`38; 2; <r>; <g>; <b>`*在终端找到彩色文本时找到了这个帖子,这篇帖子对我有帮助所以我分享这个小技巧* (4认同)
  • 我不希望通过向日志消息添加各种格式来"破坏"输出日志,因为日志消息也会转到文件中.我希望通过配置日志记录系统来完成此操作,并且仅针对控制台记录器. (3认同)