ASP.NET MVC 使用Log4Net在不同目录中记录不同类型的日志
在上一篇文章中,實現(xiàn)了利用Log4Net記錄系統(tǒng)中出現(xiàn)的問題。如果同時還需要記錄用戶操作的監(jiān)控日志,就需要一些修改
修改Web.Cofig配置文件 ,增加一個logger節(jié)點和appender節(jié)點,用于監(jiān)控操作日志配置,并且設(shè)置不同的日志文件路徑,如下圖所示:
<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" /><!--設(shè)置日志文件名稱的生成規(guī)則 --><param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" /><!--日志文件是否靜態(tài):否--><param name="StaticLogFileName" value="false" /><!--日志格式的內(nèi)容和布局--><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" /><!--設(shè)置日志文件名稱的生成規(guī)則 --><param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" /><!--日志文件是否靜態(tài):否--><param name="StaticLogFileName" value="false" /><!--日志格式的內(nèi)容和布局--><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()方法中原來的隊列代碼中的這句代碼,變?yōu)橄到y(tǒng)問題型日志,如下圖所示:?
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);}} });在要監(jiān)控用戶操作的地方,加上如下圖中的代碼,用來打印監(jiān)控日志:
public class HomeController : Controller{public static log4net.ILog log = log4net.LogManager.GetLogger("CommonLogger");//定義為用戶監(jiān)控日志,對應(yīng)WebConifg中的<logger name="CommonLogger">public ActionResult About(){int result = 0;int x = 1, y = 0;result = x / y;//系統(tǒng)報錯日志ViewBag.Message = "Your application description page.";return View();}public ActionResult Contact(){log.Error("好像出錯了");//寫入自定義的普通監(jiān)控日志ViewBag.Message = "Your contact page.";return View();}}使用效果如下圖所示:
? ? ? ? ? ? ? ??
Common文件夾下的日志:?
?
Error文件夾下的日志:?
?
?總結(jié):
Log4Net 有3個主要組件:loggers、appenders 和 layouts。這三個組件一起工作式使得開發(fā)者能夠根據(jù)信息類型和等級level記錄信息,以及在運行時控制信息的格式化和信息的的寫入位置(如控制臺、文件、內(nèi)存、數(shù)據(jù)庫等)。過濾器幫助這些組件控制追加器(appender)的行為和把對象轉(zhuǎn)換成字符串的對象渲染。
Appender:可以將日志輸出到不同的地方,不同的輸出目標對應(yīng)的不同的 Appender,如RollingFileAppender(滾動文件)、AdoNetAppender(數(shù)據(jù)庫)、SmtpAppender(郵件)等。
level(級別):標識這條日志信息的重要級別。None>Fatal>Error>Warn>DEBUG>INFO>ALL.設(shè)定一個level,那么低于這個level等級的日志是不會被寫到Appender中的。
Log4Net還可以設(shè)定多個Appender,可以實現(xiàn)同時將日志記錄到文件、數(shù)據(jù)、發(fā)送郵件等:可以設(shè)定不同的Appender的不同Level,可以實現(xiàn)普通級別都記錄到文件、Error以上級別都發(fā)送郵件:可以實現(xiàn)對不同的類設(shè)定不同Appender:開可以自定義 Appender,自己實現(xiàn)將Error信息發(fā)短信等。
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的ASP.NET MVC 使用Log4Net在不同目录中记录不同类型的日志的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 刑法中关于计算机犯罪的规定
- 下一篇: C# 6 的新特性