Utilisation de log4net

Utilisation de log4net

Avant de commencer

Ce mini tuto donne quelques informations de base pour bien débuter avec log4net, une librairie permettant de gérer les logs. http://logging.apache.org/log4net/

Fonctionnement de base

Il existe différent niveau de log :

ALL
DEBUG
INFO
WARN
ERROR
FATAL
OFF
Ils peuvent être représentés par la hiérarchie suivante : DEBUG < INFO < WARN < ERROR < FATAL. En d'autres termes, si on log en niveau INFO, tout ce qui sera sur INFO et plus élevé sera automatiquement loggué.

Paramétrage

Log4net supporte une 20aine de manière différente pour logguer les informations, par exemple dans une base de donnée, sur la console, sur la console en couleur, par l'envoie de mail, fichiers, etc. Tout ou presque se passe au niveau du fichier de configuration. Je propose ici un mini exemple en utilisant la console avec couleur.

Premièrement, il faut indiquer que notre fichier de configuration contiendra log4net. Ceci se fait avec l'aide d'une section :

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" />
</configSections>

Il est maintenant possible de rajouter notre section

<log4net>

Pour commencer, on va déclarer l'appender, c'est le type de log qu'on va utiliser. Comme je l'ai indiqué plus haut, j'ai choisi de présenter la console en couleur qui correspond à la classe ColoredConsoleAppender.

<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
...
</appender>

Que faut-il mettre là dedans ? Premièrement, les attributs de mapping, pour que le loggeur sache quelle couleur il doit utiliser pour quel niveau, par exemple :

<mapping>
    <level value="DEBUG" />
    <foreColor value="Green" />
</mapping>
<mapping>
    <level value="INFO" />
    <foreColor value="Red" />
    <backColor value="White" />
</mapping>
<mapping>
    <level value="WARN" />
    <foreColor value="White" />
    <backColor value="Yellow" />
</mapping>
<mapping>
    <level value="ERROR" />
    <foreColor value="White" />
    <backColor value="Red, HighIntensity" />
</mapping>

Le niveau FATAL n'est pas spécifié dans cet exemple, ce qui n'est pas un problème : il héritera automatiquement des attributs du précédant, à savoir du niveau ERROR.

Ensuite, on a la possibilité de définir un format de sortie pour formater les informations comme on en a envie. Ceci se fait avec l'attribut layout, par exemple :

<layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d{yyyy-MM-dd hh:mm:ss} %-5p - %m%n" />
</layout>

%d représente la date avec le format qui suit,
%p est le niveau de log actuel
%m le message
%n un retour à la ligne

Pour terminer, on indique grâce à l'attribut layout quel est le niveau de log qu'il faut actuellement utiliser. On précise donc le niveau et le nom de l'appender associé :

<root>
    <level value="INFO" />
    <appender-ref ref="ColoredConsoleAppender" />
</root>

Voilà, notre loggeur est configuré, il ne reste plus qu'à l'utiliser !

Utilisation du loggeur

Encore une fois, quelques lignes suffisent à mettre en place le système.

public class Program
{
    protected static readonly ILog _log = LogManager.GetLogger(typeof(Program));

    static void Main(string[] args)
    {
        XmlConfigurator.Configure();

        _log.Debug("This is a DEBUG Text");
        _log.Info("How beautyful the console looks like!");
        _log.Warn("Warning!");
        _log.Error("Oooups, there is an error...");
        _log.Fatal("Fatal error");

        Console.Read();
    }
}

On crée le loggeur grâce à la méthode static GetLogger de la classe LogManager. On appelle ensuite la méthode Configure de la classe XmlConfigurator pour lire le fichier de config. Dans le cadre d'une application windows, c'est le fichier app.config qui va être lu par défaut.

Il ne reste plus qu'à utiliser l'objet !

Et voici la sortie.

Le premier texte n'est pas inscrit car le niveau de log est actuellement sur INFO dans le level de l'attribut root du fichier de configuration.

Conclusion

Simple et efficace, ne demande pas ou très peu de temps pour la mise en place, et on trouve pleins d'exemples sur le site officiel : http://logging.apache.org/log4net/

Intro: http://logging.apache.org/log4net/release/manual/introduction.html

Exemple de Config: http://logging.apache.org/log4net/release/config-examples.html

Code complet du fichier de config pour cet exemple :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" />
    </configSections>
    <log4net>
        <root>
            <level value="INFO" />
            <appender-ref ref="ColoredConsoleAppender" />
        </root>
        <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
            <mapping>
                <level value="DEBUG" />
                <foreColor value="Green" />
            </mapping>
            <mapping>
                <level value="INFO" />
                <foreColor value="Red" />
                <backColor value="White" />
            </mapping>
            <mapping>
                <level value="WARN" />
                <foreColor value="White" />
                <backColor value="Yellow" />
            </mapping>
            <mapping>
                <level value="ERROR" />
                <foreColor value="White" />
                <backColor value="Red, HighIntensity" />
            </mapping>
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%d{yyyy-MM-dd hh:mm:ss} %-5p - %m%n" />
            </layout>
        </appender>
    </log4net>
</configuration>
A voir également
Ce document intitulé « Utilisation de log4net » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous