天天看點

ASP.NET MVC5架構搭建4--log4net架構整合架構引用log4net配置異常攔截測試

本文将介紹如何整合log4net架構并如何使用該架構來進行日志的管理。

架構引用

首先我們必須在Web項目下添加架構的引用。右鍵點選Web項目下的引用,選擇管理Nuget程式包。

ASP.NET MVC5架構搭建4--log4net架構整合架構引用log4net配置異常攔截測試

搜尋log4gnet,安裝到項目中。

ASP.NET MVC5架構搭建4--log4net架構整合架構引用log4net配置異常攔截測試

log4net配置

在Web項目根目錄下建立log4net.config配置檔案,具體配置資訊入下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <log4net>    
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
    </appender>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="log/" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <staticLogFileName value="false" />
      <datePattern value="yyyyMMdd'.log'" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="1MB" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message %newline" />
      </layout>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="ConsoleAppender" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>
</configuration>
           

然後打開properties/AssemblyInfo檔案,在檔案末尾添加下面語句,告訴程式加載配置檔案,注意檔案名一緻:

異常攔截

本項目使用Application_Error來進行整個項目的異常處理,如果要使用Application_Error首先要關閉全局異常的攔截,以下方法二選一:

在Web.config下system.web節點添加以下内容,關閉自定義異常:

打開golbal檔案,注釋掉全局過濾器:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    //FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);

    // autofac注冊
    AutofacConfig.Register();
}
           

最後打開golbal檔案添加log變量和Application_Error方法,修改成以下内容:

using System;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using MVC5Demo.Web.App_Start;

namespace MVC5Demo.Web
{
    public class MvcApplication : System.Web.HttpApplication
    {
    	// 添加log變量
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            //FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            // autofac注冊
            AutofacConfig.Register();
        }

        protected void Application_Error(Object sender, EventArgs e)
        {
            var lastError = Server.GetLastError();
            log.Error(lastError.Message, lastError);
            Response.WriteFile("~/Views/Shared/Error.cshtml");
            Server.ClearError();
        }
    }
}
           

測試

到目前為止,log4net已整合完畢,下面讓我們來測試一下。

打開Controllers/HomeController檔案,對Index函數進行代碼改寫,制造一個異常:

public ActionResult Index()
{
    var a = 0;
    var b = 10 / a;
    ViewBag.msg = testService.GetItems();
    return View();
}
           

該函數會報一個嘗試除以0的異常。

啟動項目:

ASP.NET MVC5架構搭建4--log4net架構整合架構引用log4net配置異常攔截測試
ASP.NET MVC5架構搭建4--log4net架構整合架構引用log4net配置異常攔截測試

繼續閱讀