Log4net HowTo

De Wikifago.

Sommaire

Exemple de syntaxe du fichier de configuration du logger

Logger de 2 fichiers tournants de 1Mo max chacun, dans le répertoire "logs" de l'exe qui l'utilise.

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <!-- Niveaux de trace possibles dans l'ordre : ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF -->
  <root>
    <level value="DEBUG" />
    <appender-ref ref="RollingLogFileAppender" />
  </root>
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value=".\\logs\\appli.log" />
    <param name="AppendToFile" value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="2" />
    <maximumFileSize value="1Mb" />
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%date [%thread] %-5level %c:%line [%x] - %m%newline" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="DEBUG" />
      <param name="LevelMax" value="FATAL" />
    </filter>
  </appender>
</log4net>


Exemple d'utilisation à l'interieur du fichier web.config

<?xml version="1.0"?>
<configuration>
  <!-- association des sections personnalise avec leurs classes de manipulation-->
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-1.0" />
  </configSections>
  <appSettings>
    ...
  </appSettings>
  <log4net>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="log\\webservice.log" />
      <param name="AppendToFile" value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="4" />
      <maximumFileSize value="1Mb" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%date [%thread] %-5level %c:%line [%x] - %m%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG" />
        <param name="LevelMax" value="FATAL" />
      </filter>
    </appender>
  </log4net>
  <system.web>
    ...
  </system.web>
</configuration>


Le fichier peut utiliser des répertoires spécifiques à windows tel que ceux que l'on retrouve dans l'énuméré Environment.SpecialFolder.

Si l'on veut écrire dans le répertoire servant de référentiel commun pour les données spécifiques à l'application qui sont utilisées par l'utilisateur itinérant actuel (Environment.SpecialFolder.ApplicationData); le paramètre File doit s'écrire ainsi :

<param name="File" value="${APPDATA}\\SONG IHM\\logs\\appli.log" />

D'autre variables sont possibles : Mes documents -> ${USERPROFILE}\Mes documents; Bureau ${USERPROFILE}\Bureau; Répertoire windows ->${WINDIR}

Configuration de log4net au niveau de l'assembly

Indiquer a log4net que la config se trouve dans le fichier appli.log4net, et que la configuration doit être prise à chaud.

[assembly: log4net.Config.XmlConfigurator(Watch = true, ConfigFile = "appli.log4net")]


Utilisation dans le code C# pour la classe Toto

Importer log4net dans la classe

    using log4net;

Déclarer une variable statique dans la classe

    private static readonly log4net.ILog log = LogManager.GetLogger(typeof(Toto));

Utiliser le logger

      try
      {
        _hostname = System.Net.Dns.GetHostName();
        _ipAddress = Dns.GetHostEntry(_hostname).AddressList[0].ToString();
      }
      catch (Exception ex)
      {
        log.Error("Erreur lors de l'initialisation du context de l'IHM", ex);
        MessageBox.Show("Erreur lors de l'initialisation blabla", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
      }

Logger au niveau debug avec 2 paramètres ( ou plus si on veut... )

log.DebugFormat("Aujourd'hui : {0} heure:{1}",DateTime.Now.ToShortDateString(),DateTime.Now.Hour);
Outils personnels