日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET MVC 使用Log4Net记录系统运行中问题

發(fā)布時間:2025/3/11 asp.net 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET MVC 使用Log4Net记录系统运行中问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

log4net是.Net下一個非常優(yōu)秀的開源日志記錄組件。log4net記錄日志的功能非常強大。它可以將日志分不同的等級,以不同的格式,輸出到不同的媒介。

在NuGet程序包中下載log4Net組件,如下圖所示:?

?

打開Web.config文件,在<configSections>中添加如下配置節(jié)點:

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

?緊靠上圖節(jié)點,添加如下配置節(jié)點:

<!--log4Net的另一種配置:動態(tài)配置--><log4net><!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL --><!-- Set root logger level to ERROR and its appenders --><root><level value="ALL"/><appender-ref ref="SysAppender"/></root><!-- Print only messages of level DEBUG or above in the packages --><logger name="WebLogger"><!--這里進一步限制了日志級別,只有在大于等于DEBUG的情況下才會記錄日志--><level value="DEBUG"/></logger><appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net" ><!--日志放在項目的App_Data文件夾--><param name="File" value="App_Data/" /><!--日志以追加形式記錄--><param name="AppendToFile" value="true" /><!--日期作為回滾:日期排序--><param name="RollingStyle" value="Date" /><!--設(shè)置日志文件名稱的生成規(guī)則 --><param name="DatePattern" value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" /><!--日志文件是否靜態(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="&#13;&#10;----------------------header--------------------------&#13;&#10;" /><param name="Footer" value="&#13;&#10;----------------------footer--------------------------&#13;&#10;" /></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><!--Log4Net配置結(jié)束-->

注意: <configSections> 必須是 <configuration>元素下第一個子元素,并且是唯一的。不然會報錯,報錯界面如下所示:

?

?

在Global.asax.cs文件中的Application_Start方法中,插入如下代碼:?

log4net.Config.XmlConfigurator.Configure();

考慮到記錄日志會存在并發(fā)的問題,這里通過隊列的方式來記錄日志:把所有產(chǎn)生的日志信息存放到一個隊列里,然后通過新建一個線程不斷的從這個隊列里讀取異常信息,然后往日志里寫,這也就是所謂的生產(chǎn)者--消費者模式。?

新建一個類MyErrorAttribute?,繼承自全局異常類HandleErrorAttribute,,如下圖所示:

public class MyErrorAttribute:HandleErrorAttribute{public static Queue<Exception> ExceptionQueue = new Queue<Exception>();public override void OnException(ExceptionContext filterContext){ExceptionQueue.Enqueue(filterContext.Exception);base.OnException(filterContext);}}

?在FilterConfig類中替換成 上圖 自定義的 類:

public static void RegisterGlobalFilters(GlobalFilterCollection filters){//filters.Add(new HandleErrorAttribute());//注釋掉系統(tǒng)默認的filters.Add(new MyErrorAttribute());}

在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("testError");logger.Error(ex.ToString());//將異常寫入log4net}else{Thread.Sleep(50);}}else{Thread.Sleep(50);}}});

此時,?Global.asax.cs文件中的Application_Start方法已經(jīng)變成如下圖所示的樣子了:

protected void Application_Start(){log4net.Config.XmlConfigurator.Configure();AreaRegistration.RegisterAllAreas();FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);ThreadPool.QueueUserWorkItem(o =>{while (true){if (MyErrorAttribute.ExceptionQueue.Count > 0){Exception ex = MyErrorAttribute.ExceptionQueue.Dequeue();if (ex != null){log4net.ILog logger = log4net.LogManager.GetLogger("testError");logger.Error(ex.ToString());//將異常寫入log4net}else{Thread.Sleep(50);}}else{Thread.Sleep(50);}}});}

?

接下去開始測試:在控制器中添加一段引發(fā)異常的代碼,如下圖所示:?

public ActionResult About(){int result = 0;int x = 1, y = 0;result = x / y; //引發(fā)異常ViewBag.Message = "Your application description page.";return View();}

運行,系統(tǒng)跳轉(zhuǎn)到error界面,如下圖所示:

?

打開App_Data文件,查看日志文件如下所示:?

?

至此為止,一個利用Log4Net記錄系統(tǒng)異常的功能開發(fā)完成了。?

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的ASP.NET MVC 使用Log4Net记录系统运行中问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。