使log4j控制台追加器对不同线程使用不同颜色

hjzp0vay  于 2022-11-06  发布在  其他
关注(0)|答案(3)|浏览(130)

我正在追踪一些并发问题,当登录到控制台时,让每个线程的输出行以不同的颜色显示会很有帮助。我使用的是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的行应该使用不同的颜色。

zpqajqem

zpqajqem1#

您可以使用jcabi-log中的MulticolorLayout。将此依赖项添加到项目中:

<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将被替换为DEBUGINFOERROR等,然后绘制成与日志记录级别相关的颜色。此外,您还可以使用自己的颜色或预定义的颜色,例如:

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的更多文档。

rlcwz9us

rlcwz9us2#

您可以扩展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的控制台附加器配置中的标准org.apache.log4j.PatternLayoutconversionPattern中使用它:

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

[1][What does "\u001BJ" represent?

wrrgggsh

wrrgggsh3#

参见PatternLayout,配置属性“高亮显示”:https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout

相关问题