MVC下Log4Net的配置和使用


       對於網站來講,我們不能將異常信息顯示給用戶, Log4Net用來記錄日志,可以將程序運行過程中的信息輸出到文件,數據庫中等地方,可以通過日志查看系統的運行過程,發現系統的問題。log4net的使用步驟如下:

      1.添加對log4net.dll的引用。

      2.在配置文件中添加配置。如下是在web.config的配置:

         在configSections下節點配置為:

<!--日志的配置-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4Net"/>

        配置為:

   

 <!--日志的配置開始-->
<log4net>
    <root>
      <level value="ALL"/>
      <appender-ref ref="SysAppender"/>
    </root>
 
    <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="&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" />
        <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>
  <!--日志的配置結束-->

        Appender:可以將日志輸出到不同的地方,不同的輸出目標對應不同的Appender:RollingFileAppender(滾動文件),

   AdoNetAppender(數據庫), SmtpAppender (郵件)等。

      level(級別):標識這條日志信息的重要級別。None>Fatal>ERROR>WARN>DEBUG>INFO>ALL,設定一個Level,那么低於

  這個 Level的日志是不會被寫到Appender中的。

3.在程序一開始的時候,我們需要在Global.asax.cs文件中的Application_Start事件中進行一下初始化配置。

 protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            // 默認情況下對 Entity Framework 使用 LocalDB
            Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);

            //讀取日志  如果使用log4net,應用程序一開始的時候,都要進行初始化配置
            log4net.Config.XmlConfigurator.Configure();
        }

4.我們可以寫一個類,定義一個靜態方法,這個方法將可以將我們的錯誤消息進行輸出。因為不僅僅一個地方需要,所以我們把它定義為了靜態方法。

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Common.Logging;

namespace HWH.OADemo.Common
{
    public  class LogHelper
    {
        public static void WriteLog(string txt)
        {
            ILog log = LogManager.GetLogger("log4netlogger");
            log.Error(txt);
          
        }
    }
}

5.MVC為我們提供了一種全局過濾機制,其中有一種過濾器叫做異常過濾器,當項目中出現異常的時候執行異常處理器中的代碼。

  為了做到不修改源代碼,我們可以自定義一個類,使這個類繼承自HandleErrorAttribute這個類,並重寫其內部方法。這個方法內部代碼的作用

  就是處理異常,將異常信息記錄日志,讓當前請求跳轉到錯誤頁面。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace HWH.OADemo.UI.Models
{
    public class MyExceptionFileAttribute:HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            base.OnException(filterContext);
            //處理錯誤消息,將其跳轉到一個頁面
            Common.LogHelper.WriteLog(filterContext.Exception.ToString());
            //頁面跳轉到錯誤頁面
            filterContext.HttpContext.Response.Redirect("/Error.html");
        }
    }
}

6.由於全局都需要進行異常的處理,我們需要在Global.asax的RegisterGlobalFilters方法中注冊我們自己的異常處理過濾器。

 public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new MyExceptionFileAttribute());
        }

  操作完畢,在項目出現異常的時候,我們就很清楚的查看錯誤信息了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM