AspNetCore 使用log4net+IExceptionFilter 记录错误日志
错误日志的好处我就不说了,大家都心里有数,那今天浩子就给大家说一说基本的错误日志吧这次通过log4net记录日志。
原来写过一个关于Nlog的日志框架,传送门为:https://www.cnblogs.com/ZaraNet/p/9957655.html
使用呢,直接nuget log4net吧,这个就不多说了,那我们看一下如何使用。
1.创建log4net.config
2.配置Startup.
3.定义HttpGlobalExceptionFilter
在根目录创建log4net.config,其定义如下:
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.11.0, Culture=neutral, PublicKeyToken=1B44E1D426115821" />
</configSections>
<log4net>
<root>
<!--<level value="DEBUG"/>-->
<level value="ERROR"/>
<!--根据log级别记录到不同的日志文件-->
<!--<appender-ref ref="DebugLog" />-->
<appender-ref ref="ErrorLog" />
</root>
<appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
<!-- 最后放开注释-->
<span style="font-family: Arial, Helvetica, sans-serif;">
<!--<lockingModel type="命名空间.MinimalLockDeleteEmpty" />-->
</span>
<param name="File" value="Log\" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM\\yyyy-MM-dd.'log'" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
<securityContext type="log4net.Util.WindowsSecurityContext">
<credentials value="Process" />
</securityContext>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="ERROR" />
</filter>
</appender>
</log4net>
</configuration>
在Startup.cs定义如下,记得引用相应的命名空间。
public static ILoggerRepository repository { get; set; } public Startup(IConfiguration configuration)
{
Configuration = configuration; //加载log4net日志配置文件
repository = LogManager.CreateRepository("NETCoreRepository");
XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
} public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{ services.AddMvc(options =>
{
options.Filters.Add<Models.HttpGlobalExceptionFilter>(); //加入全局异常类
});
}
控制器方面:
public class IndexController : Controller
{
private ILog log = LogManager.GetLogger(Startup.repository.Name, typeof(HttpGlobalExceptionFilter));
public IActionResult Index()
{
log.Error("哎哟我去");
return View();
}
}
那我们可以看到呢,我们的日志已经生成好了,但是有经验的人都应该知道,这个如果你不记录错误的话,你也是每天创建一个这样的文件,那么我们应该怎么办呢?看了一下国内的网站,还没有对这个有针对性的解决方案,但我们可以最low的定义一个计时器,来找到为空的日志文件,如果它是为空的我们就删除它。
你可以自己搞个任务调度的框架去完成这个需求,当然在这里我还是非常推荐使用Quertz的。你自己去看一下它是不是0kb就完事了,Quertz文章传送门:https://www.cnblogs.com/ZaraNet/p/9962786.html.
public IActionResult Index()
{
try{}
catch{
..
}
return View();
}
回归正题,我们想一想,在一般的控制器中,每次进行逻辑业务的时候,都需要try,catch吗? 我们可以这样耦合度就太大了,所以我们最好通过全局filter。
public class HttpGlobalExceptionFilter : IExceptionFilter
{
private ILog log = LogManager.GetLogger(Startup.repository.Name,typeof(HttpGlobalExceptionFilter));
/// <summary>
/// 当系统发生未捕捉的异常时就会触发这个方法
/// </summary>
/// <param name="context">context是上下文,包含了错误异常信息</param>
public void OnException(ExceptionContext context)
{
log.Error("哎呀呀我是菜鸡");
}
}
你还可以自己定义记录格式:
public static void ErrorLog(string throwMsg, Exception ex)
{
string errorMsg = string.Format("【抛出信息】:{0} <br>【异常类型】:{1} <br>【异常信息】:{2} <br>【堆栈调用】:{3}", new object[] { throwMsg,
ex.GetType().Name, ex.Message, ex.StackTrace });
errorMsg = errorMsg.Replace("\r\n", "<br>");
errorMsg = errorMsg.Replace("位置", "<strong style=\"color:red\">位置</strong>");
logerror.Error(errorMsg);
}
继承IExceptionFilter接口,在你程序报错的时候就会走到这里,所以你可以在这里完成一些操作去配合日志框架,我们还需要去注册服务
public void ConfigureServices(IServiceCollection services)
{
....///
services.AddMvc(options =>
{
options.Filters.Add<Filter.HttpGlobalExceptionFilter>();//全局异常类
});
}
之后你就直接在OnException中直接进行写入就好了。今天就说到这里吧。嘿嘿!!
AspNetCore 使用log4net+IExceptionFilter 记录错误日志的更多相关文章
- 点滴积累【C#】---使用log4net组件记录错误日志(以文本形式记录)
效果: 描述: 利用log4net组件进行错误日志的记录,log4net记录错误的方式我所了解的有4种,No.1 文本形式记录日志,No.2存储到数据库形式记录日志,No.3控制台控制显示日志,No. ...
- WebForm应用log4net记录错误日志——使用线程列队写入
我的项目结构如下图: 日志帮助类库需要log4net包:工具—NuGet包管理器—管理解决方案NuGet程序包 线程日志帮助类 FlashLogger.cs 代码 using System; usin ...
- ASP.NET MVC中Log4Net记录错误日志的使用
第一.在管理NuGet程序包 =>下载 Log4Net 第二.在web.config配置Log4Net 1:在<configuration>节点下 <configSection ...
- MVC4.0 利用HandleErrorAttribute和log4net实现记录异常日志功能
1.MVC4.0中HandleErrorAttribte已经帮我们处理了异常问题,当我们新建一个非空的MVC项目时候,在FilterConfig中会发现这样的代码 public class Filte ...
- ASP.NET记录错误日志的方式
程序记录错误日志是一种看起来对一般用户没什么作用,但对程序开发者用处很大的东西,它能查出错误或异常的程序马迹.那么,常用的记录错误日志的方式有哪些呢? 大多数情况下使用的是 1.直接记录为txt/xm ...
- asp.net mvc中加入log4net记录错误日志
直接上代码示例:https://share.weiyun.com/aff36f2547514cfefe129ebb8ccb28ef 首先添加加log4net的dll,推荐用nuget.... 贴上配置 ...
- ASP.NET - 记录错误日志
不需要像log4net/Nlog/Common Logging配置,简单好用. 不用增加声明logger对象,可记录当前执行状况. 可以定义 维护功能模板的开发人员,以便用功能模块对于开发人员. 出处 ...
- C# 记录错误日志
程序的错误日志如何记录下来? 可以在遇到异常时,Catch异常,然后把异常的信息输出到txt文件中即可 /// <summary> /// 错误日志 /// </summary> ...
- ASP.NET 配置log4net启用写错误日志功能
http://www.cnblogs.com/yeminglong/archive/2013/05/21/3091192.html 首先我们到apche的官网下载log4net的项目编译得到log4n ...
随机推荐
- Docker 学习9 Docker私有registry
一.docker registry分类 二.安装docker-hub提供的registry 1.安装 [root@localhost yum.repos.d]# yum install -y dock ...
- 实验一《Java开发环境的熟悉》实验报告
(一)基础操作 实验要求: 1 .建立"自己学号exp1"的目录 2 .在"自己学号exp1"目录下建立src,bin等目录 3 .javac,java的执行在 ...
- 20175305张天钰《java程序设计》第八周学习总结
<java程序设计>第八周学习总结 第十五章 泛型与集合框架 一.知识点学习 1.String类 1.String类不可以有子类. 2.用户无法输出String对象的引用,输出的是字符序列 ...
- Python封装:实现输出一个文件夹下所有各个文件的地址存为列表集合内——Jason niu
def getAllImages(folder): assert os.path.exists(folder) assert os.path.isdir(folder) imageList = os. ...
- 【Java并发编程二】Java并发包
1.Java容器 1.1.同步容器 Vector ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数组大小不满足时 ...
- django自制后台左侧导航代码
自定义一个sort.py页面: 写入一下代码: class lanmusort(object): def __init__(self): self.arr=[] def lanmuget(self,o ...
- Spring Cloud项目MVN编译 -- Non-resolvable import POM
最近利用闲余时间,打算搭建一套基于Spring Cloud G版的微服务架构(Spring boot 2.1.0),一顿操作之后,IDEA也没有提示什么错误,自认为微服务搭建完毕.启动项目前,习惯性的 ...
- jquery 操作服务端控件,select 控件
<asp:DropDownList ID="ddl" runat="server"></asp:DropDownList> <se ...
- 在 Vim 中优雅地查找和替换(转)
总有人问我 Vim 中能不能查找,当然能!而且是超级强的查找! 这篇文章来详细介绍 Vim 中查找相关的设置和使用方法. 包括查找与替换.查找光标所在词.高亮前景/背景色.切换高亮状态.大小写敏感查找 ...
- STS(Spring Tool Suite)下SSM(Spring+SpringMVC+Mybatis)框架搭建(一)
最近在用SSM框架做一个网站,就顺便把自己要做的笔记需要了解的东西都写了下来,看看对大家学习SSM框架有没有帮助. 开发环境: 1.win10 64位 2.spring-tool-suite-3.9. ...