2010-08-11 23 views
2

我顯然不理解log4net。我的根日誌級別配置如下:爲什麼log4net只記錄錯誤,如果我的<root>級別是INFO?

<root> 
    <level value="ERROR"/> 
    <appender-ref ref="FileAppender" /> 
</root> 

我的日誌初始化如下所示:

private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

而且我的實際日誌調用看起來如下:

LOG.Error("Error submitting Registration.", exc); 

這裏的有趣的部分。如果我將根日誌級別設置爲INFO,則此日誌語句僅可用。爲什麼日誌級別ERROR不起作用(並且我只想要錯誤,而不是Info,Debug等等......)?

+0

你對水平圖做任何事嗎? http://logging.apache.org/log4net/release/sdk/log4net.Repository.ILoggerRepository.LevelMap.html – 2010-08-11 13:43:43

回答

3
<root> 
    <level value="ALL" /> 
... 
</root> 

有人我log4net的-CONFIGFILE的:

<appender name="FileAppender_FullLog" type="log4net.Appender.FileAppender"> 
    <file value="Log_Full.txt" /> 
    <appendToFile value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] [%logger{2}] - %message%newline" /> 
    </layout> 
</appender> 

<appender name="FileAppender_SmallLog" type="log4net.Appender.FileAppender"> 
    <file value="Log.txt" /> 
    <appendToFile value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] [%logger{2}] - %message%newline" /> 
    </layout> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMin value="INFO" /> 
    <levelMax value="FATAL" /> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
</appender> 

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> 
    .. 
</appender> 

<!--LogLevel: OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL --> 
<root> 
    <level value="ALL" /> 
    <appender-ref ref="FileAppender_FullLog" /> 
    <appender-ref ref="FileAppender_SmallLog" /> 
    <appender-ref ref="SmtpAppender" /> 
</root> 

編輯:

<appender name="FileAppender_SmallLog" type="log4net.Appender.FileAppender"> 
    <file value="Log.txt" /> 
    <appendToFile value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] [%logger{2}] - %message%newline" /> 
    </layout> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMin value="ERROR" /> 
    <levelMax value="FATAL" /> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
</appender> 

<!--LogLevel: OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL --> 
<root> 
    <level value="ALL" /> 
    <appender-ref ref="FileAppender_SmallLog" /> 
</root> 

更好的方法IST使用「<濾波器類型=」 log4net.Filter.LevelRangeFilter「> ...」因爲你可以,如果你想在這個功能對於每一個附加器更改此設置。

+0

感謝弗洛伊德。麻煩是我其實不想要所有的日誌。我只想要錯誤日誌,但該日誌級別似乎不起作用。 – willem 2010-08-11 13:15:35

+0

我已編輯我的文章(請參閱「編輯:」) – Floyd 2010-08-11 13:31:34

3

隨着我們聰明的建築師的幫助下,我想通這一個...

我曾經在我的AssemblyInfo.cs日誌初始化(但這是錯誤的)。

我感動日誌初始化到我的Global.asax在app_startup:

protected void Application_Start(Object sender, EventArgs e) 
    { 
     string configFilePath = Server.MapPath("~/Config/Log4Net.config"); 
     log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(configFilePath)); 
    } 

該位使用Server.Mappath是非常重要的,否則log4net的嘗試從SYSTEM32 \ inetsrv文件夾中讀取其配置。

我想我以前的日誌記錄工作不時,由於程序集加載的順序,或類似的東西。無論哪種方式,這種解決方案的作品

相關問題