94 votes

log4Net config dans un fichier externe ne fonctionne pas

Nous sommes à l'aide de log4net et que vous voulez spécifier, c'est la configuration dans un fichier de config (comme nous l'avons fait avec d'autres sections). Pour ce faire, nous avons changé la log4net section dans l'Application.config:

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

Et dans le Journal.Fichier de Config (même répertoire que l'Application.config), nous avons:

<log4net>
  <appender name="General" type="log4net.Appender.FileAppender">
    <file value="log.txt" />
    <layout type="log4net.Layout.SimplyLayout" />
  </appender>
  <root>
    <appender-ref ref="General" />
  </root>
</log4net>

Cependant, lors de l'exécution de l'application, aucun fichier journal est créé (et pas de connexion fait). Il n'y a pas de messages d'erreur de la sortie de la console.

Si nous déplaçons le contenu du Journal.fichier de configuration de retour dans l'App.config (en remplacement de la première ligne de code ci-dessus), il fonctionne comme prévu. Aucune idée de pourquoi ça ne fonctionne pas dans un fichier externe?

120voto

Mitch Wheat Points 169614

Avez-vous l'attribut suivant dans votre fichier AssemblyInfo.cs :

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

et code comme celui-ci au début de chaque classe qui nécessite une fonctionnalité de journalisation:

 private static readonly ILog log = 
LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 

J'ai un article de blog contenant ceci et d'autres informations ici .

42voto

Precipitous Points 1891

Il y a un open défaut sur cette question. Log4Net ne prend pas en charge la configSource attribut des éléments de configuration. Pour une utilisation purement fichier de configuration de la solution que vous utilisez le log4net.Clé de configuration dans appSettings.

Étape 1: Inclure la normale à la section de configuration définition:

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

Étape 2: Utilisation de la magie log4net.Clé de configuration dans appSettings.

<appSettings>
      <add key="log4net.Config" value="log4net.simple.config" />
</appSettings>

Étape 3: Contribuer a un patch pour corriger le traitement de configSource.

30voto

Greg Domjan Points 5953

L'étape qui a été manquée est

 log4net.Config.XmlConfigurator.Configure(); 
 

cela entraînera l'utilisation de configSource. Assurez-vous de l'appeler une fois avant d'appeler GetLogger ();

22voto

Lewis Moten Points 99

Assurez-vous que votre fichier log4net.config est défini avec les propriétés suivantes:

Action de construction: contenu

Copier dans le répertoire de sortie: Copier toujours

11voto

Byju Points 51

Soit utilisation,

 <configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<appSettings>
<add key="log4net.Config" value="Log4Net.config" />
</appSettings>
 

ou juste,

 log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo("Log4Net.config"));
 

Dans les deux cas, le fichier, Log4Net.config, devrait figurer dans le répertoire de sortie. Vous pouvez le faire en définissant les propriétés du fichier Log4Net.config dans l'explorateur de solutions. Action de compilation - Contenu et copie dans le répertoire de sortie - Toujours copier

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