在ASP.NET MVC中使用Log4Net记录异常日志,出错时导向到静态页
本篇体验在ASP.NET MVC 4中使用Log4Net记录日志。
通过NuGet安装Log4Net。
需求是:当出错时导向到Error.html静态页面,Log4Net记录错误信息。
大致的思路是:
1、写一个记录日志的接口
2、实现记录日志接口的类,用Log4Net的API实现
3、在Web.config中配置Log4Net
4、在Global.asax中注册Log4Net
5、自定义一个出错页,以便在出错时导向到该静态页面
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=""Logs_"yyyyMMdd".txt"" />
<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记录异常日志,出错时导向到静态页相关推荐
- asp.net mvc中加入log4net记录错误日志
直接上代码示例:https://share.weiyun.com/aff36f2547514cfefe129ebb8ccb28ef 首先添加加log4net的dll,推荐用nuget.... 贴上配置 ...
- asp.net core中使用log4net
和之前的ASP.NET MVC中的使用LOG4NET的方法有些不同,这里先记录一下,使用步骤如下 : 1. 建立 ASP.NET CORE项目中,NUGET中搜索log4net后下载安装 2. 根目录 ...
- ASP.NET MVC中你必须知道的13个扩展点
ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我 ...
- Asp.Net MVC中DropDownListFor的用法(转)
2016.03.04 扩展:如果 view中传入的是List<T>类型 怎么使用 DropList 既然是List<T> 那么我转化成 T List<T>的第一个 ...
- ASP.NET MVC中的身份验证
传统的登录验证方式,是通过将用户的登录状态信息保存在服务端的Session中,再利用客户端浏览器的Cookie保存SessionID,这样浏览器每次在向服务端发起请求时,都会携带该Cookie值,服务 ...
- Asp.Net MVC中DropDownListFor的用法
在Asp.Net MVC中可以用DropDownListFor的方式来让用户选择已定列表中的一个数值.用法不复杂,这里简单做一个记录. 首先我们要定义一个 Model ,用户在 DropDownLis ...
- 通过源代码研究ASP.NET MVC中的Controller和View(二)
通过源代码研究ASP.NET MVC中的Controller和View(一) 在开始之前,先来温习下上一篇文章中的结论(推论): IView是所有HTML视图的抽象 ActionResult是Cont ...
- 在Asp.Net MVC中实现RequiredIf标签对Model中的属性进行验证
在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现RequiredIf标签对Model中的属性进行验证 具体场景为:某一属性是否允许为null的验证,要根据另 ...
- Asp.net mvc中的Ajax处理
在Asp.net MVC中的使用Ajax, 可以使用通用的Jquery提供的ajax方法,也可以使用MVC中的AjaxHelper. 这篇文章不对具体如何使用做详细说明,只对于在使用Ajax中的一些需 ...
最新文章
- linux下使用tar命令
- SaltStack 学习笔记 - 第四篇: SaltStack常用模块
- chrome jsonView插件安装
- 第三方快递接口API调用
- 2015-03-18 - Deliberately pass a wrong note type for my task creation
- c#中WepAPI(post/get)控制器方法创建和httpclient调用webAPI实例
- CompletableFuture详解~设置任务结果
- VS Code编译C/C++
- juniper CLI 基本操作
- 【BZOJ4247】挂饰,又一个奇特的背包
- mysql事物介绍_MySQL--事务介绍
- make files touse cmd line to protect exe
- oracle读取blob字段的方法,如何读取Oracle的BLOB字段里的文件?
- 个人博客系统开发记录
- 深度理解Powell优化算法
- 工具 | 网络调试助手的简单使用
- java面试中掺水了,java软件工程师工作简历模板下载
- 替换字符串中的通配符
- 全球及中国雾化铜基粉末行业运营状况与发展动态分析报告2022-2028年
- 【错误解决】SpringBoot邮件服务的一些错误及其解决方案
热门文章
- VBA【遍历每个工作表并将工作表表名赋予B2单元格】
- ab 发送post请求测试API性能
- JavaScript学习笔记(2)——JavaScript和DOM的关系
- 为jQuery的$.ajax设置超时时间
- webpack 配置react脚手架(四):路由配置
- About LOCAL_PRIVATE_PLATFORM_APIS in Android.mk
- 汽车成黑客攻击新目标
- python,day13-堡垒机
- Axure7.0 以及 中文汉化语言包下载 axure汉化包
- SQL 左连接(left join) 排序 分页 中遇到的未按理想状态排序分页的解决方案