欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET?MVC使用Log4Net記錄異常日志并跳轉(zhuǎn)到靜態(tài)頁

 更新時(shí)間:2022年09月15日 08:37:40   作者:Darren?Ji  
這篇文章介紹了ASP.NET?MVC使用Log4Net記錄異常日志并跳轉(zhuǎn)到靜態(tài)頁的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

本篇體驗(yàn)在ASP.NET MVC 4中使用Log4Net記錄日志。

通過NuGet安裝Log4Net。

需求是:當(dāng)出錯(cuò)時(shí)導(dǎo)向到Error.html靜態(tài)頁面,Log4Net記錄錯(cuò)誤信息。

大致的思路是:

1、寫一個(gè)記錄日志的接口
2、實(shí)現(xiàn)記錄日志接口的類,用Log4Net的API實(shí)現(xiàn)
3、在Web.config中配置Log4Net
4、在Global.asax中注冊Log4Net
5、自定義一個(gè)出錯(cuò)頁,以便在出錯(cuò)時(shí)導(dǎo)向到該靜態(tài)頁面
6、ASP.NET MVC默認(rèn)的異常過濾器是HandleErrorAttribute,我們需要自定義一個(gè)繼承HandleErrorAttribute的過濾器,并把自定義的過濾器注冊到全局過濾器中去

首先定義一個(gè)記錄日志的接口。

    public interface ILoggerService
    {
        void Info(string message);
        void Warn(string message);
        void Debug(string message);
        void Error(string message);
        void Error(Exception ex);
        void Fatal(string message);
        void Fatal(Exception ex); 
    }

實(shí)現(xiàn)ILoggerService,使用用Log4Net的API實(shí)現(xiàn)。

    public class LogHelper : ILoggerService
    {
         private ILog _logger;
         public LogHelper()
         {
            _logger = LogManager.GetLogger(
                System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        }
        
        public void Info(string message) {
            _logger.Info(message);
        }
        public void Warn(string message) {
            _logger.Warn(message);
        }
        public void Debug(string message) {
            _logger.Debug(message);
        }
        public void Error(string message) {
            _logger.Error(message);
        }
        public void Error(Exception ex) {
            _logger.Error(ex.Message, ex);
        }
        public void Fatal(string message) {
            _logger.Fatal(message);
        }
        public void Fatal(Exception ex) {
            _logger.Fatal(ex.Message, ex);
        }
    }

在Web.config中配置Log4Net。

<configuration>
  <configSections>
    ......
    <!--日志的配置-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4Net" />
  </configSections>
   ......
  <!--日志的配置開始-->
  <log4net>
    <root>
      <level value="ALL" />
      <appender-ref ref="SysAppender" />
    </root>
    <logger name="WebLogger">
      <!--配置日志的級別,低于此級別的就不寫到日志里面去-->
      <level value="DEBUG" />
    </logger>
    <!--系統(tǒng)日志的格式-->
    <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="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />
      <param name="StaticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <!--<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />-->      
        <conversionPattern value="{%level}%date{MM/dd HH:mm:ss} - %message%newline%newline"/>
      </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>
  <!--日志的配置結(jié)束-->
</configuration>

在全局文件Global.asax中注冊Log4Net。

    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            ......
            //讀取日志  如果使用log4net,應(yīng)用程序一開始的時(shí)候,都要進(jìn)行初始化配置
            log4net.Config.XmlConfigurator.Configure();
        }
    }

ASP.NET MVC默認(rèn)的異常過濾器是HandleErrorAttribute,我們需要自定義,繼承該類。

    public class MyHandleExceptionAttribute : HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            base.OnException(filterContext);
            var log  = new LogHelper();
            log.Error("被系統(tǒng)過濾捕獲的異常" + filterContext.Exception);
            filterContext.HttpContext.Response.Redirect("/Error.html");
        }
    }

自定義的異常過濾器當(dāng)讓要注冊到全局過濾器中去。打開App_Start文件夾中的FilterConfig類,修改如下:

    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            //filters.Add(new HandleErrorAttribute());
            filters.Add(new MyHandleExceptionAttribute());
        }
    }

在HomeController中故意留一個(gè)錯(cuò)誤。

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            int a = 10;
            int b = 0;
            var result = a/b;
            return View();
        }
    }

在項(xiàng)目根文件夾下頂一個(gè)Error.html靜態(tài)文件,用來呈現(xiàn)錯(cuò)誤提示信息。   

當(dāng)瀏覽器請求Home/Index視圖,導(dǎo)向到Error.html出錯(cuò)頁,Log4Net自動(dòng)為我們在App_Data目錄下記錄了異常信息。 

到此這篇關(guān)于ASP.NET MVC使用Log4Net記錄異常日志并跳轉(zhuǎn)到靜態(tài)頁的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論