web-dev-qa-db-fra.com

Log4net ne crée pas de fichier journal

Je reçois une erreur sur un programme pour lequel log4net est configuré, mais aucun fichier journal n'est créé. Je suis certain que la journalisation est configurée dans le programme car d'autres utilisateurs ont créé des fichiers de journalisation identiques, en utilisant un fichier de configuration identique à celui que je publie ci-dessous (à l'exception du chemin du fichier). Je suis sûr que j'ai des autorisations d'écriture sur le chemin. Au moment où le programme échoue, il doit absolument avoir réussi l’initialisation de la journalisation.

Est-ce que quelque chose ne va pas dans ce fichier de configuration, ou quelqu'un a-t-il rencontré un problème similaire et sait-il quelque chose que je devrais rechercher dans le programme pour lequel je tente d'obtenir un journal?

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="AutoTag" type="System.Configuration.NameValueSectionHandler"/>
    <section name="WindwardReports" type="System.Configuration.NameValueSectionHandler"/>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821"/>
  </configSections>

  <AutoTag>
    <add key="_debug" value="true"/>
  </AutoTag>

  <WindwardReports>
    <add key="line.break" value="internal"/>
  </WindwardReports>

  <appSettings>
    <add key="sql.timeout" value="240"/>
  </appSettings>

  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">

      <param name="File" value="C:\Users\loganm\Documents\Catapult.log"/>

      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="2"/>
      <param name="MaximumFileSize" value="100KB"/>
      <param name="RollingStyle" value="Size"/>
      <param name="StaticLogFileName" value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] ac.server %-5p %c - %m%n"/>
      </layout>
    </appender>

    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingFileAppender"/>
    </root>
  </log4net>
</configuration>
24
That One Guy

Donnez le code suivant dans votre application avant de mettre votre code de journalisation:

log4net.Config.XmlConfigurator.Configure();

Vous pouvez le définir dans Global.asax:

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup

    // Initialize log4net.
    log4net.Config.XmlConfigurator.Configure();
}

Vous pouvez également ajouter la ligne suivante selon les recommandations de Kevin (mentionnant ou non votre nom de fichier de configuration):

[Assembly: log4net.Config.XmlConfigurator]

ou

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

J'espère que ça aide!!!

51
Naren

assurez-vous que le fichier log4net.config, propriété Copier dans le répertoire de sortie n'est pas "Ne pas copier" 

En fait, la meilleure solution consiste à ajouter

<configuration>
   <appSettings>
      <add key="log4net.Internal.Debug" value="true"/>
   </appSettings>
</configuration>

pour suivre ce qui se passe à l'arrière. Cela vous aidera à détecter le problème.

7
earslan

Voici quelques points à considérer:

  1. Peut-être utilisez-vous une version de log4net DLL différente de celle de vos collègues? Essayez de supprimer les informations de version et de clé publique de la section config, c’est-à-dire de les raccourcir pour:

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
    
  2. Essayez de changer le nom de fichier pour utiliser des barres obliques inversées, par exemple "C: \\ Utilisateurs \\ loganm\...". Vous pouvez également utiliser des barres obliques: "C:/Users/loganm/..." 

  3. Si vous avez reconstruit le programme avant de l'exécuter, assurez-vous d'utiliser le même fichier AssemblyInfo.cs que vos collègues. Une erreur courante est de ne pas initialiser l’enregistreur à cet endroit. Il devrait y avoir quelque chose comme ça en bas:

    // activation Log4Net
    [Assembly: log4net.Config.XmlConfigurator]

6
Kevin D.

J'avais ce problème aussi, étonnant combien de temps j'ai passé à tout vérifier, enfin, une requête sur Google m'a rappelé une étape de la dernière utilisation de Log4Net: je devais l'ajouter au fichier AssemblyInfo.cs! Fou! J'utilise Log4Net dans une application console C # avec les paramètres Log4Net dans le fichier app.config.

[Assembly: log4net.Config.XmlConfigurator (Watch = true)]

0
user3593282

l'accès refusé dans asp.Net User peut être un problème. Par exemple: l'exécution à partir d'un projet de test consomme, mais l'exécution à partir d'une application Web ne le sera 

il suffit d'ajouter ceci à config

<appSettings>
    <add key="log4net.Internal.Debug" value="true"/>

déboguer l'application et regarder la sortie standard. cela affichera les informations de débogage log4net (supprimées une fois le problème détecté)

0
Blue Clouds