De la couleur dans les logs

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

logback-color

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>

log4j2-color

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>

log4j-color

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

comments powered by Disqus