亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

MVC使用Log4Net進行錯誤日志記錄學習筆記4

2024-07-10 13:31:23
字體:
來源:轉載
供稿:網友

在Web應用運行過程中,我們難免會遇到程序運行異常,這個時候我們就應該將異常信息記錄下來,以便開發人員和維護人員對異常原因進行還原,對異常原因進行修復。在ASP.NET平臺中進行日志記錄的組件也有很多,如Log4Net、CommonLogging等,我們這里選用Log4Net進行異常日志的記錄。

1. 捕獲異常

在ASP.NET MVC中提供了一個全局的異常處理過濾器:HandleErrorAttribute,可以通過該過濾器捕獲異常信息。

我們在Models文件夾下新建類型Log4ExceptionAttribute,繼承HandleErrorAttribute類,同時重寫OnException方法來捕獲異常數據:          

using System.Web.Mvc;namespace PMS.WebApp.Models{  public class Log4ExceptionAttribute:HandleErrorAttribute  {    /// <summary>    /// 重寫OnException方法來捕獲異常數據    /// </summary>    /// <param name="filterContext"></param>    public override void OnException(ExceptionContext filterContext)    {      base.OnException(filterContext);      //捕獲當前異常數據      var ex = filterContext.Exception;    }  }}

新建過濾器后我們還需要在Global文件中調用的RegisterGlobalFilters方法中完成自己定義異常處理過濾的注冊。

using System.Web.Mvc;using PMS.WebApp.Models;namespace PMS.WebApp{  public class FilterConfig  {    public static void RegisterGlobalFilters(GlobalFilterCollection filters)    {      //filters.Add(new HandleErrorAttribute());      filters.Add(new Log4ExceptionAttribute());    }  }}

2. 考慮到多用戶并發操作時可能產生的問題,我們需要新建一個隊列來進行異常信息的暫存,同時開辟一個線程專門對隊列中的異常信息進行處理。

在Log4ExceptionAttribute類中新建一個靜態的異常類型的隊列,在發生異常后,程序自動觸發OnException方法,方法中將當前的異常信息入隊后,跳轉到錯誤頁面。

 

using System;using System.Collections.Generic;using System.Web.Mvc;namespace PMS.WebApp.Models{  public class Log4ExceptionAttribute:HandleErrorAttribute  {    public static Queue<Exception> Exceptions=new Queue<Exception>();    /// <summary>    /// 重寫OnException方法來捕獲異常數據    /// </summary>    /// <param name="filterContext"></param>    public override void OnException(ExceptionContext filterContext)    {      base.OnException(filterContext);      //捕獲當前異常數據      var ex = filterContext.Exception;      //將異常數據入隊      Exceptions.Enqueue(ex);      //跳轉到錯誤頁面      filterContext.HttpContext.Response.Redirect("/Error.html");    }  }}

Log4Net的配置是在應用程序配置文件中進行的,我們先在配置文件中進行Log4Net的配置。Log4Net需要配置的節點位置和SpringNet完全相同,首先需要在configSessions中新增子節點,然后在configuration節點中增加log4net節點完成具體配置。

 

<configuration> <configSections>  <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->    <!--↓Log4Net配置↓-->  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>  <!--↑Log4Net配置↑-->    <!--↓Spring.Net配置↓-->  <sectionGroup name="spring">   <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>  </sectionGroup>  <!--↑Spring.Net配置↑-->   </configSections>  <!--↓Spring.Net配置↓--> <spring>  <context>   <resource uri="file://~/Config/controllers.xml"/>   <resource uri="file://~/Config/services.xml"/>  </context> </spring> <!--↑Spring.Net配置↑-->  <!--↓Log4Net配置↓--> <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">   <level value="DEBUG"/>  </logger>  <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net" >   <param name="File" value="App_Data/" />   <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> <!--↑Log4Net配置↑--> ...</configuration>

在配置文件中可以對日志記錄的信息、格式、文件名等作出具體的配置,下面是配置信息的詳解

 

<?xml version="1.0"?><configuration> <configSections>  <section name="log4net"        type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> </configSections> <!--站點日志配置部分--> <log4net>  <root>   <!--控制級別,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->   <!--比如定義級別為INFO,則INFO級別向下的級別,比如DEBUG日志將不會被記錄-->   <!--如果沒有定義LEVEL的值,則缺省為DEBUG-->   <level value="ERROR"/>   <appender-ref ref="RollingFileAppender"/>  </root>  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">   <!--日志文件名開頭-->   <file value="c:/Log/TestLog4net.TXT"/>   <!--多線程時采用最小鎖定-->   <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>   <!--日期的格式,每天換一個文件記錄,如不設置則永遠只記錄一天的日志,需設置-->   <datePattern value="(yyyyMMdd)"/>   <!--是否追加到文件,默認為true,通常無需設置-->   <appendToFile value="true"/>   <!--變換的形式為日期,這種情況下每天只有一個日志-->   <!--此時MaxSizeRollBackups和maximumFileSize的節點設置沒有意義-->   <!--<rollingStyle value="Date"/>-->   <!--變換的形式為日志大小-->   <!--這種情況下MaxSizeRollBackups和maximumFileSize的節點設置才有意義-->   <RollingStyle value="Size"/>   <!--每天記錄的日志文件個數,與maximumFileSize配合使用-->   <MaxSizeRollBackups value="10"/>   <!--每個日志文件的最大大小-->   <!--可用的單位:KB|MB|GB-->   <!--不要使用小數,否則會一直寫入當前日志-->   <maximumFileSize value="2MB"/>   <!--日志格式-->   <layout type="log4net.Layout.PatternLayout">    <conversionPattern value="%date [%t]%-5p %c - %m%n"/>   </layout>  </appender> </log4net></configuration>

 在Global文件中的Application_Start方法中開啟一個線程,用于將隊列中的錯誤信息寫入日志文件。

using System.Linq;using System.Threading;using System.Web.Http;using System.Web.Mvc;using System.Web.Optimization;using System.Web.Routing;using log4net;using PMS.WebApp.Models;using Spring.Web.Mvc;namespace PMS.WebApp{  // 注意: 有關啟用 IIS6 或 IIS7 經典模式的說明,  // 請訪問 http://go.microsoft.com/?LinkId=9394801  public class MvcApplication : SpringMvcApplication//HttpApplication  {    protected void Application_Start()    {      log4net.Config.XmlConfigurator.Configure();//讀取Log4Net配置信息      AreaRegistration.RegisterAllAreas();      WebApiConfig.Register(GlobalConfiguration.Configuration);      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);      RouteConfig.RegisterRoutes(RouteTable.Routes);      BundleConfig.RegisterBundles(BundleTable.Bundles);      //開啟一個線程,掃描異常信息隊列.      var filePath = Server.MapPath("/Log/");      ThreadPool.QueueUserWorkItem((a) =>      {        while (true)        {          //判斷隊列中是否有數據          if (Log4ExceptionAttribute.Exceptions.Any())          {            //出隊一條異常信息            var ex = Log4ExceptionAttribute.Exceptions.Dequeue();            //若異常信息不為空            if (ex == null) continue;            //將異常信息寫入到日志文件中            var logger = LogManager.GetLogger("errorMsg");            logger.Error(ex.ToString());          }          else          {            //若異常信息隊列為空,則線程休息三秒            Thread.Sleep(3000);          }        }      }, filePath);    }  }}

 成功完成錯誤日志的配置。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩美女视频中文字幕| 国产成人97精品免费看片| 日韩av网址在线| www.日韩av.com| 久久久人成影片一区二区三区| 欧美大片欧美激情性色a∨久久| 午夜精品一区二区三区在线| 一区二区三区久久精品| 日韩一中文字幕| 精品国产一区二区三区久久久| 91丝袜美腿美女视频网站| 欧美中文在线免费| 国产精品嫩草影院久久久| 97色在线视频观看| 国内偷自视频区视频综合| 91久久精品美女| 国产久一一精品| 亚洲成人精品视频在线观看| 欧美精品免费在线| 亚洲人成在线一二| 亚洲人成绝费网站色www| 色综合久久88色综合天天看泰| 欧美大片免费观看在线观看网站推荐| 久久亚洲成人精品| 日韩中文在线中文网三级| 黄色91在线观看| 欧美精品在线极品| 亚洲一区精品电影| 欧美综合国产精品久久丁香| 91中文精品字幕在线视频| 亚洲综合在线中文字幕| 伊人久久免费视频| 亚洲精品一区av在线播放| 欧美成人免费全部观看天天性色| 亚洲色图17p| 久久精品视频在线| 91免费福利视频| 欧美成人午夜视频| 日韩精品久久久久| 久久国产天堂福利天堂| 欧美日韩国产123| 久久在线观看视频| 欧美日韩精品在线| 国产午夜精品理论片a级探花| 久久99青青精品免费观看| 超碰日本道色综合久久综合| 欧美大肥婆大肥bbbbb| 国产精品嫩草影院一区二区| 一区二区三区www| 亚洲国产成人爱av在线播放| 亚洲精品久久久久久久久久久久| 国产福利视频一区| 久久精品免费播放| 日韩小视频在线| 欧美色videos| 国产精品美女久久久久av超清| 亚洲一区精品电影| 欧美老女人性视频| 亚洲成人av片在线观看| 日韩一区二区欧美| 一区国产精品视频| 亚洲美女在线观看| 亚洲欧美一区二区精品久久久| 1769国内精品视频在线播放| 国产精品自拍偷拍| 久久99精品国产99久久6尤物| 国产精品视频播放| 精品国产欧美成人夜夜嗨| 精品一区二区三区三区| 亚洲一区二区在线播放| 日韩国产精品亚洲а∨天堂免| 日韩av在线免费观看| 欧美黄色www| 欧洲永久精品大片ww免费漫画| 亚洲成人黄色在线观看| 亚洲大胆人体视频| 欧美老女人bb| 国产精品久久久久久影视| 久久99热精品这里久久精品| 成人网在线免费观看| 亚洲无限av看| 欧美在线视频一区二区| 国产在线精品自拍| 欧美日韩一区二区在线| 麻豆成人在线看| 欧美性一区二区三区| 日韩精品小视频| 亚洲综合一区二区不卡| 欧美亚洲国产另类| 国产成人亚洲综合青青| 久久91亚洲精品中文字幕奶水| 在线国产精品视频| 91亚洲精品一区| 2023亚洲男人天堂| 粉嫩老牛aⅴ一区二区三区| 美日韩丰满少妇在线观看| 国产又爽又黄的激情精品视频| 人妖精品videosex性欧美| 青青青国产精品一区二区| 国产一区二区三区在线观看网站| 国产网站欧美日韩免费精品在线观看| 亚洲性夜色噜噜噜7777| 日韩中文字幕不卡视频| 亚洲偷欧美偷国内偷| 午夜精品久久久久久久白皮肤| 久久久www成人免费精品| 中文在线资源观看视频网站免费不卡| 成人亚洲激情网| 亚洲第一福利视频| 国产精品丝袜视频| 欧美性受xxxx白人性爽| 青青久久av北条麻妃海外网| 欧美一区在线直播| 国产精品视频99| 亚洲成**性毛茸茸| 欧美激情视频在线免费观看 欧美视频免费一| 久久99热精品这里久久精品| 2019中文字幕全在线观看| 欧美日韩一区二区在线播放| 国内伊人久久久久久网站视频| 日韩在线视频免费观看| 成人观看高清在线观看免费| 91中文字幕一区| 欧美亚洲在线观看| 热久久这里只有精品| 日韩中文字幕在线看| 国产免费成人av| 曰本色欧美视频在线| 欧美另类暴力丝袜| 一区二区三区无码高清视频| 欧美日韩在线视频一区二区| 国产成人综合av| 久久精品视频99| 欧美日韩一区二区免费视频| 国产亚洲精品久久| 精品国产乱码久久久久久虫虫漫画| 日韩在线免费观看视频| 久久亚洲私人国产精品va| 日本电影亚洲天堂| 亚洲精品国产福利| 在线午夜精品自拍| 国产999精品视频| 成人精品视频99在线观看免费| 欧美激情视频网站| 日日摸夜夜添一区| 国产精品视频网站| 国产综合在线观看视频| 国产精品日日摸夜夜添夜夜av| 国产精品视频一区二区高潮| 亚洲激情在线观看视频免费| 欧美日韩视频免费播放| 欧美日韩亚洲精品一区二区三区| y97精品国产97久久久久久| 亚洲精品国产精品国自产在线| 亚洲黄色av女优在线观看| 亚洲国产精品va在线看黑人动漫| 日本一区二区三区四区视频| 91色在线观看| 亚洲天堂第二页| 亚洲free性xxxx护士白浆| 久久免费在线观看| 国产精品jvid在线观看蜜臀| 亚洲欧美日韩区| 中文字幕亚洲欧美日韩在线不卡|