2014-01-14 41 views
5

我log4net的配置是這樣的,log4net的日誌記錄不工作 - 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> 

我有一個記錄器輔助類的,

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; } 
     } 
    } 

在我的程序集信息,我有這樣的條目,

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

log4net.config是添加到web項目的配置文件。

在我登錄使用記錄器類的代碼,當我設置了上述設置

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

記錄一直在努力。但突然錄井已停止工作。 但是,當我創建一個新的asp.net mvc網站與上述設置,記錄工程。 我嘗試使用IIS Express和本地IIS。在這兩種情況下,我已經創建了測試應用程序的日誌工作。

我不明白爲什麼它不記錄?我該如何診斷?有什麼可能的問題?

回答

11

由我自己解決,原因是「出於某種原因」log4net配置未從程序集信息加載。我仍然不知道爲什麼會發生。

我試了很多修復由不同的職位提出。最後解決了這個問題。 this post中提到的解決方案幫助我解決了這個問題。

我加入瞭如下配置,

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

它開始記錄!

然後我除去下面的行從組件信息,

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

謝謝!奇怪的是,它並沒有從AssemblyInfo中提取出來,但他們的應用程序設置確實有效! –

2

的原因是,log4net的嘗試從第一使用LogManager.GetLogger()組件加載的配置。如果它是您的類庫之一,它將簡單地忽略所有其他程序集中的屬性。

解決它最簡單的方法是在你的啓動文件來調用LogManager(如Program.csGlobal.asax):

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

//rest of app init. 

這樣做,將讓你與組件屬性的預期行爲。

0

我發現log4net不會加載webconfig配置,除非你調用log4net.Config.XmlConfigurator.Configure();在啓動。

protected void Application_Start() 
    { 
     // your other codes 

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

    }