2014-01-14 19 views
5

Meine log4net-Konfiguration ist das,Log4net Protokollierung nicht funktioniert - asp.net Mvc

<?xml version="1.0" encoding="utf-8" ?> 
    <log4netConfiguration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <appSettings> 
    <add key="log4net.Config" value="log4net.config" /> 
    </appSettings> 
    <log4net> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file type="log4net.Util.PatternString" value="C:\my_logs/my_web_logs/my_log_%date{ddMMyyyy}.log" /> 
     <appendToFile value="true" />  
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="30MB" /> 
     <datePattern value="yyyyMMdd" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%4t %d{ABSOLUTE} %-5p %m%n"/> 
     <!--<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />--> 
     </layout> 
    </appender> 
    <root> 
     <level value="INFO" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 
    </log4net> 
</log4netConfiguration> 

ich als Logger Hilfsklasse haben,

public static class Logger 
    { 
     private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

     public static log4net.ILog Log 
     {    
      get { return log; } 
     } 
    } 

In meiner Montage Info, ich habe diesen Eintrag,

// Configure log4net using the .config file 
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 

log4net.config ist die Konfigurationsdatei, die dem Webprojekt hinzugefügt wurde.

Im Code, den ich den Logger Klasse log verwenden,

Logger.Log.Info("User visits Sign In Page."); 

Logging gearbeitet hat, wenn ich die obige Einstellung einzurichten. Aber plötzlich funktioniert das Logging nicht mehr. Aber wenn ich eine neue asp.net mvc Website mit den oben genannten Einstellungen erstellt, funktioniert die Protokollierung dafür. Ich habe versucht mit IIS Express und lokalen IIS. In beiden Fällen funktioniert die Protokollierung für die von mir erstellte Testanwendung.

Ich kann nicht herausfinden, warum es nicht protokolliert? Wie kann ich das diagnostizieren? Was sind die möglichen Probleme?

Antwort

11

Gelöst von mir selbst, Grund war "aus irgendeinem Grund" log4net Konfiguration wurde nicht aus Assembly-Informationen geladen. Ich weiß immer noch nicht, warum das passiert.

Ich habe versucht, so viele Korrekturen von verschiedenen Posts vorgeschlagen. Endlich wurde das Problem behoben. Lösung erwähnt in this post hat mir geholfen, das Problem zu lösen.

Ich habe folgende Konfiguration hinzugefügt,

<!--These settings load the log4net configuration.--> 
     <add key="log4net.Config" value="log4net.config"/> 
     <add key="log4net.Config.Watch" value="True"/> 

Es beginnt die Anmeldung!

Dann entfernte ich folgende Zeile aus der Montage Info,

// Configure log4net using the .config file 
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 
+0

Danke! Seltsam, dass es nicht von AssemblyInfo übernommen wird, aber die App-Einstellungen haben den Trick gemacht! –

2

Der Grund dafür ist, dass Log4Net die Config von der Baugruppe zu laden versucht, die ersten LogManager.GetLogger() verwendet. Wenn es sich um eine Ihrer Klassenbibliotheken handelt, wird das Attribut in allen anderen Assemblys einfach ignoriert.

Der einfachste Weg, um es zu beheben ist LogManager in Ihrer Startdatei aufzurufen (wie Program.cs oder Global.asax):

var logger = LogManager.GetLogger(typeof(Program)); 
logger.Info("Application started."); 

//rest of app init. 

dass Dadurch werden Ihnen das erwartete Verhalten mit dem Assemblierung-Attribute erhalten.

0

Ich fand, dass log4net die webconfig-Konfiguration nicht lädt, wenn Sie log4net.Config.XmlConfigurator.Configure(); beim Start.

protected void Application_Start() 
    { 
     // your other codes 

     log4net.Config.XmlConfigurator.Configure(); // must have this line 
     Logger = log4net.LogManager.GetLogger(typeof(MvcApplication)); 

    } 
Verwandte Themen