Заставить консольный приложение log4j использовать разные цвета для разных потоков
Я отслеживаю некоторые проблемы параллелизма, и было бы очень полезно иметь выходные строки из каждого потока разного цвета при входе в консоль. Я нахожусь на 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 должны быть разных цветов.
3 ответа
Вы можете продлить 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
Реализация Инго Тон.- Логирование консоли с цветовой кодировкой в блоге Log4J.
Просто добавьте, может быть, вы могли бы также добиться этого, установив в MDC переменную "randColor" со случайным цветовым кодом ANSI, например, в Filter
и используя его в conversionPattern
стандарта org.apache.log4j.PatternLayout
в конфигурации консоли вашего log4j:
<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>
Ты можешь использовать 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.
См. PatternLayout, свойство конфигурации "highlight": https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout