一聚教程网:一个值得你收藏的教程网站

热门教程

ASP.NET M5C使用Log4Net记录异常日志并跳转到静态页

时间:2023-08-30 09:36:45 编辑:袖梨 来源:一聚教程网

这篇文章介绍了ASP.NET MVC使用Log4Net记录异常日志并跳转到静态页的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

本篇体验在ASP.NET MVC 4中使用Log4Net记录日志。

通过NuGet安装Log4Net。

需求是:当出错时导向到Error.html静态页面,Log4Net记录错误信息。

大致的思路是:

1、写一个记录日志的接口2、实现记录日志接口的类,用Log4Net的API实现3、在Web.config中配置Log4Net4、在Global.asax中注册Log4Net5、自定义一个出错页,以便在出错时导向到该静态页面6、ASP.NET MVC默认的异常过滤器是HandleErrorAttribute,我们需要自定义一个继承HandleErrorAttribute的过滤器,并把自定义的过滤器注册到全局过滤器中去

首先定义一个记录日志的接口。

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); }

实现ILoggerService,使用用Log4Net的API实现。

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><!--系统日志的格式--><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><!--日志的配置结束--></configuration>

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

public class MvcApplication : System.Web.HttpApplication{protected void Application_Start(){AreaRegistration.RegisterAllAreas();......//读取日志如果使用log4net,应用程序一开始的时候,都要进行初始化配置log4net.Config.XmlConfigurator.Configure();}}

ASP.NET MVC默认的异常过滤器是HandleErrorAttribute,我们需要自定义,继承该类。

public class MyHandleExceptionAttribute : HandleErrorAttribute{public override void OnException(ExceptionContext filterContext){base.OnException(filterContext);var log= new LogHelper();log.Error("被系统过滤捕获的异常" + filterContext.Exception);filterContext.HttpContext.Response.Redirect("/Error.html");}}

自定义的异常过滤器当让要注册到全局过滤器中去。打开App_Start文件夹中的FilterConfig类,修改如下:

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

在HomeController中故意留一个错误。

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

在项目根文件夹下顶一个Error.html静态文件,用来呈现错误提示信息。

当浏览器请求Home/Index视图,导向到Error.html出错页,Log4Net自动为我们在App_Data目录下记录了异常信息。

到此这篇关于ASP.NET MVC使用Log4Net记录异常日志并跳转到静态页的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持一聚教程网。

热门栏目