53 votes

Demander à log4net d'utiliser le fichier de configuration de l'application pour les données de configuration.

Je voudrais stocker les données de configuration de log4net dans mon fichier application.config. En me basant sur ma compréhension de la documentation, j'ai fait ce qui suit :

  1. Ajouter une référence à log4net.dll

  2. Ajoutez la ligne suivante dans AssemblyInfo.cs :

    [assembly: log4net.Config.XmlConfigurator(Watch = true)]
  3. Initialiser le logger comme suit :

    private static readonly ILog log = LogManager.GetLogger(typeof(frmWizard));
  4. J'ai le code suivant dans mon app.config :

    <configSections>
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
    <log4net>
      <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
      </appender>
      <root>
        <level value="INFO" />
        <appender-ref ref="ConsoleAppender" />
      </root>
    </log4net>

Cependant, lorsque je lance l'application, j'obtiens l'erreur suivante sur la console :

Aucun appender nommé [Consoleappender] n'a pu être trouvé.

Comment puis-je faire en sorte que log4net lise les paramètres du fichier de configuration ?

Gracias.

0 votes

Quel code avez-vous dans votre app.config ?

4 votes

Note aux autres : Le site app.config les paramètres indiqués sont, apparemment, corrects sauf pour EventLogAppender étant nommé dans le <appender> section, et ConsoleAppender étant nommé dans le <root><appender-ref> section - qui ne correspondent pas. Voir la réponse de @Konstantin. Aussi, pour ceux qui ne sont pas familiers avec log4net en utilisant cette question pour apprendre à l'utiliser - notez que vous voudrez probablement un autre type de l'appender que celle d'ici - comme type="log4net.Appender.FileAppender,log4net" (qui s'ajoute à un fichier, et non au journal des événements de Windows).

39voto

Charles Bretana Points 59899

Ajoutez une ligne à votre app.config dans l'élément configSections

<configSections>
 <section name="log4net" 
   type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.10.0, 
         Culture=neutral, PublicKeyToken=1b44e1d426115821" />
</configSections>

Puis, plus tard, ajouter la section log4Net, mais déléguer ailleurs le fichier de configuration de log4Net...

<log4net configSource="Config\Log4Net.config" />

Dans le code de votre application, lorsque vous créez le journal, écrivez

private static ILog GetLog(string logName)
{
    ILog log = LogManager.GetLogger(logName);
    return log;
}

0 votes

En passant, il me manquait aussi [assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)] Plus précisément ConfigFile = "Log4Net.config .

37voto

Konstantin Points 1118

D'après la configuration indiquée dans la question, il n'y a qu'un seul appender configuré et il est nommé "EventLogAppender". Mais dans la configuration de Root, l'auteur fait référence à un appender nommé "ConsoleAppender", d'où le message d'erreur.

1 votes

Ceci devrait être la réponse acceptée car le PO veut fusionner. log4net.config y app.config de son application en un seul.

5voto

Nick N. Points 3939

Je soutiens pleinement la réponse de @Charles Bretana. Cependant, si cela ne fonctionne pas, assurez-vous qu'il y ait seulement un <section> ET que configSections est le premier enfant de l'élément Root :

configsections doit être le premier élément de votre app.Config après la configuration :

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net"  type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />
  </configSections>
  <!-- add log 4 net config !-->
  <!-- add others e.g. <startup> !-->
</configuration>

3voto

Avez-vous essayé d'ajouter un configsection à votre app.config ? par exemple.

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

2voto

Shekhar Points 518

Tous les noms d'appender doivent être reflétés dans la section Root.
Dans votre cas, le nom de l'appender est EventLogAppender mais dans le <root> <appender-ref .. il est nommé comme ConsoleAppender . Ils doivent correspondre.

Vous pouvez ajouter plusieurs appenders à votre configuration de journal, mais vous devez enregistrer chacun d'entre eux dans l'onglet <root> section.

<appender-ref ref="ConsoleAppender" />
<appender-ref ref="EventLogAppender" />

Vous pouvez également vous référer à la page apache documentation sur la configuration de log4net.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X