<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 22:36:29
        文檔

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

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

        在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);
         }
         }
        }
        
        

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

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        MVC使用Log4Net進行錯誤日志記錄學習筆記4:在Web應用運行過程中,我們難免會遇到程序運行異常,這個時候我們就應該將異常信息記錄下來,以便開發人員和維護人員對異常原因進行還原,對異常原因進行修復。在ASP.NET平臺中進行日志記錄的組件也有很多,如Log4Net、CommonLogging等,我們這里選用Lo
        推薦度:
        標簽: 記錄 使用 進行
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 99久久国产热无码精品免费| 99精品在线免费观看| 亚洲人妖女同在线播放| 亚洲最大的成人网站| 久久成人永久免费播放| 青青青国产在线观看免费| 亚洲美女大bbbbbbbbb| 69视频在线是免费观看| 亚洲AV伊人久久青青草原| 99久久亚洲综合精品成人网| 三级网站在线免费观看| 亚洲av无码一区二区三区不卡| 日本免费一区二区三区四区五六区 | 91免费人成网站在线观看18| 67pao强力打造67194在线午夜亚洲 | 日韩精品成人无码专区免费| 亚洲人精品午夜射精日韩 | 中文字幕无码免费久久9一区9| 97在线观免费视频观看| 亚洲乱码一区二区三区国产精品| 最近免费中文字幕4| 综合偷自拍亚洲乱中文字幕| 一二三四影视在线看片免费 | 亚洲国产成人久久三区| 午夜寂寞在线一级观看免费| 亚洲天天做日日做天天欢毛片| 18女人水真多免费高清毛片| 精品亚洲综合久久中文字幕| 久久久久久精品免费看SSS| 亚洲日韩av无码中文| 久久久久久久久免费看无码| 特级毛片免费播放| 亚洲AV人无码激艳猛片| 在线免费观看伊人三级电影| 亚洲午夜久久久久久尤物| 亚洲成av人片不卡无码久久| 男人j进入女人j内部免费网站| 亚洲日产无码中文字幕| 日本阿v免费费视频完整版| 国产成人亚洲精品91专区高清 | 四虎影视在线影院在线观看免费视频|