文章出處
文章列表
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); } }
文章列表
全站熱搜