2008-12-16 8 views
41

Je voudrais stocker des données de configuration log4net dans mon fichier application.config. Sur la base de ma compréhension de la documentation, je l'ai fait ce qui suit:Demandez fichier config log4net application de l'utilisation des données de configuration

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

  2. Ajoutez la ligne suivante dans AssemblyInfo.cs:

    [assembly: log4net.Config.XmlConfigurator(Watch = true)] 
    
  3. Initialiser l'enregistreur comme suit:

    private static readonly ILog log = LogManager.GetLogger(typeof(frmWizard)); 
    
  4. Je 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, quand je lance l'application, je reçois l'erreur suivante sur la console:

Pas appender nommé [ConsoleAppender ] pourrait être trouvé. Comment puis-je obtenir log4net pour lire les paramètres du fichier de configuration?

Comment puis-je obtenir log4net pour lire les paramètres du fichier de configuration?

Merci!

+0

Quel code avez-vous dans votre app.config? – sgwill

+3

Note aux autres: Les paramètres 'app.config' affichés sont, apparemment, corrects * sauf * pour' EventLogAppender' étant nommé dans la section '', et 'ConsoleAppender' étant nommé dans le' ' section - qui ne correspondent pas. Voir la réponse de @ Konstantin. Aussi, ** pour les autres utilisateurs de log4net ** utilisant cette question pour apprendre à l'utiliser - ** notez que vous voudrez probablement un * type * d'appender ** différent de celui ici - comme 'type =" log4net .Appender.FileAppender, log4net "' (qui s'ajoute à un fichier, pas au journal des événements Windows). –

Répondre

33

Ajouter 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> 

Ensuite, ajoutez plus tard, la section Log4net, mais déléguer au fichier de configuration Log4net réelle ailleurs ...

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

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

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

Merci juste ce que j'avais besoin – Jay

+0

+ 1 pour l'emplacement de configuration alternative ne s'est pas rendu compte que c'était une option –

+0

Une note de côté, il me manquait également [[assembly: log4net.Config.XmlConfigurator (ConfigFile = "Log4Net.config", Watch = true)] 'Spécifiquement ** ConfigFile =" Log4Net.config "**. –

2

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

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

De la config montré dans la question il n'y a qu'un appender configuré et il est nommé « EventLogAppender ». Mais dans la configuration de la racine, l'auteur fait référence à un appender nommé « ConsoleAppender », d'où le message d'erreur.

1

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

Vous pouvez ajouter plusieurs appenders à votre config de journal, mais vous devez vous inscrire chacun d'entre eux dans la section <root>.

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

Vous pouvez également consulter la apache documentation sur la configuration log4net.

1

Je soutiens entièrement la réponse de @Charles Bretana. Toutefois, si cela ne fonctionne pas, s'il vous plaît assurez-vous qu'il n'y a qu'un seul élément <section> et que configSections est le premier enfant de l'élément racine:

configsections doit être le premier élément dans 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> 
+0

Ceci est la clé: ** est le premier enfant de l'élément racine ** – CJBS

Questions connexes