ASP.NET MVC 使用Log4Net在不同目录中记录不同类型的日志
在上一篇文章中,實現了利用Log4Net記錄系統中出現的問題。如果同時還需要記錄用戶操作的監控日志,就需要一些修改
修改Web.Cofig配置文件 ,增加一個logger節點和appender節點,用于監控操作日志配置,并且設置不同的日志文件路徑,如下圖所示:
<log4net><!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL --><!-- Set root logger level to ERROR and its appenders --><!--<root><level value="ALL"/><appender-ref ref="ErrorLogger"/><appender-ref ref="ErrorLogger"/></root>--><!-- Print only messages of level DEBUG or above in the packages --><logger name="ErrorLogger"><!--這里進一步限制了日志級別,只有在大于等于DEBUG的情況下才會記錄日志--><level value="DEBUG"/><appender-ref ref="SysAppender"></appender-ref></logger><appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net" ><!--日志放在項目的App_Data文件夾--><param name="File" value="Logs\\Error\\" /><!--日志以追加形式記錄--><param name="AppendToFile" value="true" /><!--日期作為回滾:日期排序--><param name="RollingStyle" value="Date" /><!--設置日志文件名稱的生成規則 --><param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" /><!--日志文件是否靜態:否--><param name="StaticLogFileName" value="false" /><!--日志格式的內容和布局--><layout type="log4net.Layout.PatternLayout,log4net"><param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /><param name="Header" value=" ----------------------header-------------------------- " /><param name="Footer" value=" ----------------------footer-------------------------- " /></layout></appender><logger name="CommonLogger"><!--這里進一步限制了日志級別,只有在大于等于DEBUG的情況下才會記錄日志--><level value="DEBUG"/><appender-ref ref="CommonAppender"></appender-ref></logger><appender name="CommonAppender" type="log4net.Appender.RollingFileAppender,log4net" ><!--日志放在項目的App_Data文件夾--><param name="File" value="Logs\\Common\\" /><!--日志以追加形式記錄--><param name="AppendToFile" value="true" /><!--日期作為回滾:日期排序--><param name="RollingStyle" value="Date" /><!--設置日志文件名稱的生成規則 --><param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" /><!--日志文件是否靜態:否--><param name="StaticLogFileName" value="false" /><!--日志格式的內容和布局--><layout type="log4net.Layout.PatternLayout,log4net"><param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /><param name="Header" value=" ----------------------header-------------------------- " /><param name="Footer" value=" ----------------------footer-------------------------- " /></layout></appender><appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net"><layout type="log4net.Layout.PatternLayout,log4net"><param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /></layout></appender></log4net>修改Global.asax.cs中Application_Start()方法中原來的隊列代碼中的這句代碼,變為系統問題型日志,如下圖所示:?
ThreadPool.QueueUserWorkItem(o => {while (true){if (MyErrorAttribute.ExceptionQueue.Count > 0){Exception ex = MyErrorAttribute.ExceptionQueue.Dequeue();if (ex != null){log4net.ILog logger = log4net.LogManager.GetLogger("ErrorLogger");//修改為和WebConfig中<logger name="ErrorLogger">一樣logger.Error(ex.ToString());}else{Thread.Sleep(50);}}else{Thread.Sleep(50);}} });在要監控用戶操作的地方,加上如下圖中的代碼,用來打印監控日志:
public class HomeController : Controller{public static log4net.ILog log = log4net.LogManager.GetLogger("CommonLogger");//定義為用戶監控日志,對應WebConifg中的<logger name="CommonLogger">public ActionResult About(){int result = 0;int x = 1, y = 0;result = x / y;//系統報錯日志ViewBag.Message = "Your application description page.";return View();}public ActionResult Contact(){log.Error("好像出錯了");//寫入自定義的普通監控日志ViewBag.Message = "Your contact page.";return View();}}使用效果如下圖所示:
? ? ? ? ? ? ? ??
Common文件夾下的日志:?
?
Error文件夾下的日志:?
?
?總結:
Log4Net 有3個主要組件:loggers、appenders 和 layouts。這三個組件一起工作式使得開發者能夠根據信息類型和等級level記錄信息,以及在運行時控制信息的格式化和信息的的寫入位置(如控制臺、文件、內存、數據庫等)。過濾器幫助這些組件控制追加器(appender)的行為和把對象轉換成字符串的對象渲染。
Appender:可以將日志輸出到不同的地方,不同的輸出目標對應的不同的 Appender,如RollingFileAppender(滾動文件)、AdoNetAppender(數據庫)、SmtpAppender(郵件)等。
level(級別):標識這條日志信息的重要級別。None>Fatal>Error>Warn>DEBUG>INFO>ALL.設定一個level,那么低于這個level等級的日志是不會被寫到Appender中的。
Log4Net還可以設定多個Appender,可以實現同時將日志記錄到文件、數據、發送郵件等:可以設定不同的Appender的不同Level,可以實現普通級別都記錄到文件、Error以上級別都發送郵件:可以實現對不同的類設定不同Appender:開可以自定義 Appender,自己實現將Error信息發短信等。
?
?
?
?
?
總結
以上是生活随笔為你收集整理的ASP.NET MVC 使用Log4Net在不同目录中记录不同类型的日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 刑法中关于计算机犯罪的规定
- 下一篇: C# 6 的新特性