Faire un appender log4j console utiliser des couleurs différentes pour des fils différents
je suis à la recherche de quelques problèmes de concurrence et il serait très utile d'avoir les lignes de sortie de chaque thread dans une couleur différente lors de la connexion à une console. Je suis sur OS X. Cela pourrait-il être fait en utilisant un modèle de conversion pour produire certains codes de contrôle ou aurait-il besoin d'un appender personnalisé? Quelqu'un sait comment?
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 ...
les lignes pour exec-9 et exec-10 doivent être de couleurs différentes.
2 réponses
vous pouvez prolonger PatternLayout
et outrepasser format(ILoggingEvent)
. Là, vous pourriez regarder LoggingEvent.getThreadName()
pour obtenir une couleur basée sur le nom du fil (impair/pair, peut-être?).
pour afficher la couleur sur la console, vous devez utiliser une ANSI Escape Sequence .
par exemple, pour sortir un texte rouge:
"\u001b[" // Prefix - see [1]
+ "0" // Brightness
+ ";" // Separator
+ "31" // Red foreground
+ "m" // Suffix
+ text // the text to output
+ "\u001b[m " // Prefix + Suffix to reset color
voici quelques exemples:
-
ColoredPatternLayout
mise en œuvre par L'ONG. - Couleur de Journalisation de la Console avec Log4J post de blog.
juste pour ajouter, peut - être que vous pourriez également y parvenir en mettant dans le MDC une variable "randColor" avec un code ANSI aléatoire, par exemple, dans un Filter
, et en l'utilisant dans le conversionPattern
d'un standard org.apache.log4j.PatternLayout
dans la configuration Console appender de 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>
vous pouvez utiliser MulticolorLayout
de jcabi-log . Ajouter cette dépendance au projet:
<dependency>
<groupId>com.jcabi</groupId>
<artifactId>jcabi-log</artifactId>
<version>0.17.1</version>
</dependency>
et le configurer ensuite en 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
Même dans 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>
Dans cet exemple, %p
sera remplacé par DEBUG
, INFO
, ERROR
, etc. et puis peintes dans la couleur qui est pertinent pour le niveau de journalisation. En outre, vous pourrez utiliser vos propres couleurs ou de couleurs prédéfinies, par exemple:
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
plus de documentation sur ANSI colors .