2010-04-15 79 views
5

我試圖建立log4net的,但我不能讓它工作,我在我的web.config把這個:我不能讓log4net的工作在我的web應用程序:(

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

<log4net> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
    </appender> 

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="logfile.log" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Composite" /> 
    <maxSizeRollBackups value="14" /> 
    <maximumFileSize value="15000KB" /> 
    <datePattern value="yyyyMMdd" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
    </appender> 

    <root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingFileAppender" /> 
    <appender-ref ref="TraceAppender" /> 
    </root> 
</log4net> 

然後,在我的代碼執行:。

log4net.Config.XmlConfigurator.Configure(new FileInfo(HttpContext.Current.Server.MapPath("~/Web.config"))); 
ILog log = LogManager.GetLogger("MainLogger"); 

if (log.IsDebugEnabled) 
    log.Debug("lalala"); 

但沒有任何反應我查了「日誌」變量,它包含已啓用所有的日誌記錄級別一個LogImpl對象我沒有得到任何錯誤或配置警告,我看不到任何文件在根目錄,在bin或任何地方。

我需要做些什麼才能使其工作?

+1

如果你可以在Visual Studio調試此,檢查輸出窗口時,你的應用程序大火了。 log4net輸出有關配置錯誤的任何信息。 – 2010-04-15 10:55:20

+0

您是否嘗試過爲'''屬性設置絕對路徑? (例如'C:\ logfile.log') – 2010-04-15 10:57:45

+1

除了下面的優秀答案之外,您應該只在應用程序的整個生命週期內調用Configure一次,例如,在Global.asax中啓動應用程序。 – 2010-04-15 11:46:03

回答

4

在AssemblyInfo.cs文件中是否有此行?

[assembly: log4net.Config.XmlConfigurator()] 

此外,您應該考慮Eric在他的答案中使用的「typeof(YourClass)」方法。我第一次提出了一個替代答案給我的一個。 :)

您沒有定義TraceAppender。

您沒有一個名爲 「MainLogger」 記錄器配置

<logger name="MainLogger"> 
    <level value="DEBUG"/> 
    <appender-ref ref="RollingFileAppender" /> 
    <appender-ref ref="TraceAppender" /> 
</logger> 

而且,看看here

+1

但他確實有一個定義,這是一個全部/默認。 – 2010-04-15 10:52:51

+0

公平點。我養成非常具體的習慣。我的答案是不正確的,我會盡快更新它 – 2010-04-15 10:57:15

+0

添加,我得到行重複,但如果我刪除根,那麼它工作正常! :P 謝謝! – vtortola 2010-04-15 11:00:55

9

嘗試寫:

log4net.Config.XmlConfigurator.Configure(); 

代替,因爲Web.config文件是默認位置log4net的外觀。

否則,你的代碼中刪除整條生產線及以下內容粘貼到你的AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator()] 

這將在彙編級別配置log4net的。然後在你的代碼,只需創建這樣一個記錄:

private static readonly ILog Log = LogManager.GetLogger(typeof(YourFunkyClass)); 
+1

+1我經常使用這種語法 – 2010-04-15 11:19:05

0

這是我工作的解決方案:

Configuration oConfiguration = WebConfigurationManager.OpenWebConfiguration(oRequest.ApplicationPath); 

log4net.Config.XmlConfigurator.Configure(new FileInfo(oConfiguration.FilePath)); 
相關問題