我正在追踪一些并发问题,当登录到控制台时,让每个线程的输出行以不同的颜色显示会很有帮助。我使用的是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的行应该使用不同的颜色。
zpqajqem1#
您可以使用jcabi-log中的MulticolorLayout。将此依赖项添加到项目中:
MulticolorLayout
<dependency> <groupId>com.jcabi</groupId> <artifactId>jcabi-log</artifactId> <version>0.17.1</version> </dependency>
然后在log4j.properties中对其进行配置:
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中相同:
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等,然后绘制成与日志记录级别相关的颜色。此外,您还可以使用自己的颜色或预定义的颜色,例如:
%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的更多文档。
rlcwz9us2#
您可以扩展PatternLayout并覆盖format(ILoggingEvent),然后查看LoggingEvent.getThreadName()以获得基于线程名称的颜色(可能是奇数/偶数?)。为了将颜色输出到控制台,您需要使用ANSI Escape Sequence。例如,要输出红色文本:
PatternLayout
format(ILoggingEvent)
LoggingEvent.getThreadName()
"\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的控制台附加器配置中的标准org.apache.log4j.PatternLayout的conversionPattern中使用它:
Filter
org.apache.log4j.PatternLayout
conversionPattern
<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?
wrrgggsh3#
参见PatternLayout,配置属性“高亮显示”:https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout
3条答案
按热度按时间zpqajqem1#
您可以使用jcabi-log中的
MulticolorLayout
。将此依赖项添加到项目中:然后在
log4j.properties
中对其进行配置:在
log4j.xml
中相同:在本例中,
%p
将被替换为DEBUG
、INFO
、ERROR
等,然后绘制成与日志记录级别相关的颜色。此外,您还可以使用自己的颜色或预定义的颜色,例如:有关ANSI colors的更多文档。
rlcwz9us2#
您可以扩展
PatternLayout
并覆盖format(ILoggingEvent)
,然后查看LoggingEvent.getThreadName()
以获得基于线程名称的颜色(可能是奇数/偶数?)。为了将颜色输出到控制台,您需要使用ANSI Escape Sequence。
例如,要输出红色文本:
下面举几个例子:
ColoredPatternLayout
。再补充一点,也许你也可以通过在MDC中设置一个带有随机ANSI颜色代码的变量“randColor”来实现这一点,例如,在一个
Filter
中,并在log4j的控制台附加器配置中的标准org.apache.log4j.PatternLayout
的conversionPattern
中使用它:[1][What does "\u001BJ" represent?
wrrgggsh3#
参见PatternLayout,配置属性“高亮显示”:https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout