web-dev-qa-db-fra.com

Configurer Log4Net dans une application Web

J'ai ce code et le fichier de configuration ci-dessous:

ILog log = LogManager.GetLogger(typeof(MyClass));
log.Debug("Testing");

Le répertoire TestProj n'est pas créé et si je le crée, aucun fichier TestLog.txt, aucun journal ... rien.

Une idée?

Merci,

Le fichier de configuration

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

<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="C:\\TestProj\\TestLog.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
  </layout>
</appender>

<root>
  <level value="DEBUG" />
  <appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
60
Kris-I

Vous devez appeler la fonction Configure de la XmlConfigurator

log4net.Config.XmlConfigurator.Configure();

Appelez avant votre premier appel loggin ou dans votre Global.asax comme ceci:

protected void Application_Start(Object sender, EventArgs e) {
   log4net.Config.XmlConfigurator.Configure();
}
115
shriek

Une autre façon de procéder consiste à ajouter cette ligne aux informations d'assemblage de l'application Web:

// Configure log4net using the .config file
[Assembly: log4net.Config.XmlConfigurator(Watch = true)]

Semblable à Shriek.

22
keni

1: ajoutez la ligne suivante à la classe AssemblyInfo

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

2: Assurez-vous de ne pas utiliser .Net Framework 4 Client Profile comme Target Framework (je pense que cela vous convient car sinon, la compilation serait impossible)

3: Assurez-vous de vous connecter très tôt dans votre programme. Sinon, dans certains cas, il ne sera pas initialisé correctement (pour en savoir plus, consultez log4net FAQ ).

Alors connectez-vous quelque chose lors du démarrage de l'application dans le fichier Global.asax

public class Global : System.Web.HttpApplication
{
    private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(typeof(Global));
    protected void Application_Start(object sender, EventArgs e)
    {
        Log.Info("Startup application.");
    }
}

4: Assurez-vous d’être autorisé à créer des fichiers et des dossiers sur le chemin indiqué (si le dossier n’existe pas non plus)

5: Le reste de vos informations données semble ok

9
hwcverwe

cela est souvent dû à des autorisations manquantes. Le compte Windows sur lequel le pool d'applications IIS local est exécuté peut ne pas avoir l'autorisation d'écrire dans le répertoire des applications. Vous pouvez créer un répertoire quelque part, autoriser tout le monde à l'écrire et pointer votre configuration log4net vers ce répertoire. Si un fichier journal y est créé, vous pouvez modifier les autorisations pour le répertoire de journal souhaité afin que le pool d'applications puisse y écrire.

Une autre raison pourrait être un log4net non initialisé. Dans une application winforms, vous configurez généralement log4net au démarrage de l'application. Dans une application Web, vous pouvez le faire de manière dynamique (dans votre composant de journalisation, vérifiez si vous pouvez créer un enregistreur Ilog spécifique en utilisant son nom, sinon -> appel configure ()), ou encore au démarrage de l'application dans global.asax.cs. .

2
Dirk Trilsbeek

J'ai aussi eu le même problème. Les journaux ne créaient pas. 

Veuillez vérifier que le nom de l'attribut logger doit correspondre à votre LogManager.GetLogger ("nom")

<logger name="Mylog">
      <level value="All"></level>
      <appender-ref ref="RollingLogFileAppender" />
    </logger>



private static readonly ILog Log = LogManager.GetLogger("Mylog");
0
Shakeer Hussain