Dans la quête de couleur, je me suis intéressé aux logs des applications Java. En fait il est très simple de configurer les différents frameworks de logs pour éclairer son quotidien.
Logback
L’implémentation ConsoleAppender
expose une propriété withJansi
qui permet d’activer la coloration des logs.
Il suffit ensuite d’utiliser un des pattern disponibles dans PatternLayout (celui configuré par défaut) pour customiser ses logs :
- %red, %boldRed, etc
- %highlight
Ces mots clefs sont censés encapsuler d’autres expressions. La couleur sera appliquée sur l’expression contenue entre parenthèses.
[%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg %n
%highlight
est une conversion qui permet de séparer les différents niveaux de logs. Une erreur sera affichée en rouge et en gras, un warn en rouge et un info en bleu.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>true</withJansi>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="trace">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Sous Windows il est nécessaire d’ajouter la librairie Jansi à l’exécution de l’application.
<dependency>
<groupId>org.fusesource.jansi</groupId>
<artifactId>jansi</artifactId>
<version>1.10</version>
<scope>runtime</scope>
</dependency>
Documentation officielle : http://logback.qos.ch/manual/layouts.html#coloring
Log4j 2.0
Dans la nouvelle version de Log4j, le pattern %highlight
est également disponible dans l’implémentation PatternLayout
.
Les couleurs par défaut sont différentes de celles de Logback mais il est possible de les surcharger :
%highlight{%d [%t] %-5level: %msg%n%throwable}{FATAL=white, ERROR=red, WARN=blue, INFO=black, DEBUG=green, TRACE=blue}
voir même d’utiliser les mêmes codes couleurs que Logback :
%highlight{%d [%t] %-5level: %msg%n%throwable}{STYLE=Logback}
Le deuxième pattern disponible est %style{pattern}{ANSI style}
. Il permet de choisir une couleur pour une portion de texte. La liste complète des couleurs est disponible dans la documentation de Log4j 2.
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %highlight{%-5level} %logger{36} - %msg%n"/>
</Console>
</appenders>
<loggers>
<root level="trace">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
Sous Windows il est nécessaire d’ajouter la librairie Jansi à l’exécution de l’application.
<dependency>
<groupId>org.fusesource.jansi</groupId>
<artifactId>jansi</artifactId>
<version>1.10</version>
<scope>runtime</scope>
</dependency>
Log4j
Pas de solution officielle disponible pour le bon vieux Log4j… J’ai écrit un Appender et un Layout (logj4-color) qui permettent d’utiliser le pattern #highlight
pour coloriser les logs.
Les couleurs utilisées sont :
- FATAL, rouge
- ERROR, rouge
- WARN, jaune
- INFO, gras
L’appender AnsiConsoleAppender
doit être utilisé sous Windows. Sinon le ConsoleAppender
suffit.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="com.github.jcgay.log4j.color.appender.AnsiConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="com.github.jcgay.log4j.color.layout.ColorEnhancedPatternLayout">
<param name="ConversionPattern" value="#highlight(%-5p) %c{1} - %m%n"/>
</layout>
</appender>
<root>
<priority value ="trace" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
Il suffit d’ajouter la librairie log4j-color à l’exécution de l’application.
<project>
...
<repositories>
<repository>
<id>jcgay-releases</id>
<url>https://repository-jcgay.forge.cloudbees.com/release/</url>
</repository>
</repositories>
...
<dependencies>
<dependency>
<groupId>com.github.jcgay.log4j</groupId>
<artifactId>log4j-color</artifactId>
<version>0.1</version>
<scope>runtime</scope>
</dependency>
</dependencies>
...
</project>
Plugins pour les IDE
Pour profiter de toutes ces couleurs dans son IDE préféré, il faudra utiliser des plugins pour améliorer les consoles disponibles : IntelliJ Idea : Grep Console Eclipse : Ansi Console