Je voudrais stocker les données de configuration de log4net dans mon fichier application.config. Sur la base de ma compréhension de la documentation, j'ai fait ce qui suit:
Ajouter une référence à log4net.dll
Ajoutez la ligne suivante dans AssemblyInfo.cs:
[Assembly: log4net.Config.XmlConfigurator(Watch = true)]
Initialisez l'enregistreur comme suit:
private static readonly ILog log = LogManager.GetLogger(typeof(frmWizard));
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 j'exécute l'application, j'obtiens l'erreur suivante sur la console:
Aucun appender nommé [Consoleappender] n'a été trouvé.
Comment puis-je demander à log4net de lire les paramètres du fichier de configuration?
Merci!
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>
Ensuite, ajoutez plus tard la section log4Net, mais déléguez le fichier de configuration log4Net réel 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;
}
De la configuration montrée dans la question il n'y a qu'un seul appender configuré et il est nommé "EventLogAppender". Mais dans la configuration pour root, l'auteur fait référence à un appender nommé "ConsoleAppender", d'où le message d'erreur.
Avez-vous essayé d'ajouter un gestionnaire configsection
à votre app.config? par exemple.
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
Je soutiens pleinement la réponse de @Charles Bretana. Cependant, si cela ne fonctionne pas, assurez-vous qu'il y a n seul <section>
élément ET que configSections
est le premier enfant de l'élément racine:
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>
Tous les noms d'appender doivent être reflétés dans la section racine.
Dans votre cas, le nom de l'appender est EventLogAppender mais dans le <root> <appender-ref ..
section, il est nommé ConsoleAppender . Ils doivent correspondre.
Vous pouvez ajouter plusieurs appenders à votre configuration de journal, mais vous devez enregistrer chacun d'eux dans le <root>
section.
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="EventLogAppender" />
Vous pouvez également vous référer à Apache documentation sur la configuration de log4net.