文章出處

1.MVC4.0中HandleErrorAttribte已經幫我們處理了異常問題,當我們新建一個非空的MVC項目時候,在FilterConfig中會發現這樣的代碼

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

 這時候,我們打開web.config中實現customerrors節點的配置,用戶就看不到黃頁了,將根據異常碼,訪問你指定的錯誤頁面。

2.上面是為了解決用戶體驗問題,但是作為開發者,為了更好的維護站點,我們應該了解更多的異常信息,下面我們自定義一個異常類

    public class ExceptionHandlerAttribute : HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            base.OnException(filterContext);

            LogHelper.Error(filterContext.Exception.ToString());
        }
    }

 接下來將我們自定義的屬性注入到全局篩選器中,當項目發生異常的時候,會將異常發送到我們自定義的ExceptionHandlerAttribute中進行處理

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

 由于我們使用了log4net記錄錯誤日志,所以我們還需要對log4net進行配置,首先在Application_Start()中初始化log4net的配置

    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();

            LogHelper.LoadConfig(Server.MapPath("~/Config/log4net.config"));
        }
    }

 根據自己的需求,配置log4net.config

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <log4net>
    <!-- 日志文件部分log輸出格式的設定 -->
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--最小鎖定模型以允許多個進程可以寫入同一個文件-->
      <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
      <file value="Logs\Log_" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd'.txt'" />
      <staticLogFileName value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date %newline%message %newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Error" />
        <param name="LevelMax" value="Error" />
      </filter>
    </appender>

    <root>
      <!--<level value="Error" />-->
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>
</configuration>

 下面是LogHelper類中的代碼

    public class LogHelper
    {
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        public static void LoadConfig(string path)
        {
            log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(path));
        }

        /// <summary>
        /// 錯誤信息
        /// </summary
        public static void Error(string error)
        {
            log.Error(error);
        }

        /// <summary>
        /// 致命信息
        /// </summary>
        public static void Fatal(string fatal)
        {
            log.Fatal(fatal);
        }

        /// <summary>
        /// 一般信息
        /// </summary>
        public static void Info(string info)
        {
            log.Info(info);
        }

        /// <summary>
        /// 警告信息
        /// </summary>
        public static void Warn(string warn)
        {
            log.Warn(warn);
        }
    }

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()