開發過程中經常需要調試和線上環境查看異常日志的需求,但普通消息與異常消息混在一起實在是非常難得找,上則NM的文檔夠你頭痛,所以就將Error級別的日志抽離出來。
本示例采用log4net來配置:
1、先配置web.config,添加:
<configSections> <!-- 添加log4net配置節 --> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"></section> </configSections>
2、在<configuration>直接下級添加:
<log4net> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log/" /> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="10" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyy-MM-dd'.txt'" /> <param name="RollingStyle" value="Date" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:fff} [%thread] %-5level %logger %ndc - %message%newline" /> </layout> </appender> <appender name="ErrorLogAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log/" /> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="10" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyy-MM-dd'-error.txt'" /> <param name="RollingStyle" value="Date" /> <layout type="log4net.Layout.PatternLayout"> <!--輸出格式--> <param name="ConversionPattern" value="%date 線程ID:[%thread] 日志級別:%-5level 出錯類:%logger property:[%property{NDC}] - 錯誤描述:%message%newline" /> </layout> </appender> <root> <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) --> <level value="INFO" /> <appender-ref ref="RollingLogFileAppender" /> <level value="ERROR" /> <appender-ref ref="ErrorLogAppender" /> </root>
<logger additivity="true" name="InfoLog">
<level value="INFO" />
<appender-ref ref="RollingLogFileAppender" />
</logger>
<logger additivity="true" name="ErrorLog">
<level value="ERROR" />
<appender-ref ref="ErrorLogAppender" />
</logger>
</log4net>
注意高亮處
InfoLog中配置 INFO ,只記錄INFO
ErrorLog中 <level value="ERROR" /> 從ERROR級別開始。
這樣就可以將ERROR抽離出來。
3、定義日志類LogHelper
public static class LogHelper { static ILog _logdebug = LogManager.GetLogger("Debug"); static ILog _loginfo = LogManager.GetLogger("InfoLog"); static ILog _logwarn = LogManager.GetLogger("Warn"); static ILog _logerror = LogManager.GetLogger("ErrorLog"); static ILog _logfatal = LogManager.GetLogger("Fatal"); static LogHelper() { log4net.Config.XmlConfigurator.Configure(); } public static void Info(string msg) { _loginfo.Info(msg); } public static void Warn(string msg) { _logwarn.Warn(msg); } public static void Error(string msg) { _logerror.Error(msg); } public static void Error(string errtitle, Exception ex) { _logerror.Error(errtitle, ex); } public static void Fatal(string msg) { _logfatal.Fatal(msg); } }
4、使用
LogHelper.Info("內容不正確");
LogHelper.Error("Post方法運行錯誤", ex);
最終會出現兩個文件且error記錄都在error中info中無error記錄:
========================這是個害羞的分割線============================
后面經過測試發現按照之前的配置Info信息被過濾掉了,只生成了普通日志文件,但內容為空,因此配置有問題,改配置。
去掉兩個append中的 filter。
去掉root中的內容。
添加兩個logger。