前言:

项目里我们都需要记录一些日志。当然记录的日志的方式有很多,比如用文本记录日志,数据库记录日志,甚至用word记录日志,但是这些记录日志的方式不灵活。下面我为大家介绍下一个简单的日志组件:Log4Net


简介Log4Net:

Log4Net是一个开源的记录日志的组件,可以将记录的日志输出到,txt文件、数据库、EventLog等。


配置Log4Net步骤:

①:引入Lofg4Net的dll文件(下面会有dll的下载链接)

②:在应用程序的web.config配置相关信息

      1.在configSections的标签里添加section字节

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

    2.在web.config添加下面的代码:

<log4net><!-- Define some output appenders -->
<!--针对txt文件的配置--><appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"><file value="test.txt"/><!--文件名--><appendToFile value="true"/><maxSizeRollBackups value="10"/><!--最多10个文件,多了会从头覆盖--><maximumFileSize value="1024KB"/><!--文件空间大小:可以调节--><rollingStyle value="Size"/><staticLogFileName value="true"/><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/></layout></appender><root><level value="DEBUG"/><appender-ref ref="RollingLogFileAppender"/></root></log4net><!--配置结束-->

上面的配置方式不细致,接下来给大家配置一个细致的,文档是用日期命名的:(尽量选择这个)

 <!--log4Net的另一种配置:动态配置--><log4net><!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL --><!-- Set root logger level to ERROR and its appenders --><root><level value="ERROR"/><appender-ref ref="SysAppender"/></root><!-- Print only messages of level DEBUG or above in the packages --><logger name="WebLogger"><level value="ERROR"/></logger><appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net" ><param name="File" value="App_Data/" /><!--日志放在项目的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" /><param name="Header" value="
----------------------header--------------------------
" /><param name="Footer" value="
----------------------footer--------------------------
" /></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><!--Log4Net配置结束-->

③:在Global.asax的Application_Start里添加:下面这个代码

           //log4Net读取配置文件中关于Log4Net配置信息log4net.Config.XmlConfigurator.Configure();

④:在需要记录日志的地方,添加下面的代码:(这两行代码就能直接把错误保存到文件里)

ILog logger = LogManager.GetLogger("errorMsg");//注意:ILog需要引用log4net
logger.Error(ex.ToString());

配置好Log4Net下面进行代码演示:(下面的代码我是配合了MVC中的自定义捕获来实现的,你也可以不用自定义捕获来实现)

①:自定义一个类继承HandleErrorAttribute,并重写HandleErrorAttribute里的OnException方法

public class MyExceptionAttribute: HandleErrorAttribute{ //定义一个错误队列public static Queue<Exception> ExceptionQueue = new Queue<Exception>();/// <summary>/// 捕获异常/// </summary>/// <param name="filterContext"></param>public override void OnException(ExceptionContext filterContext){base.OnException(filterContext);Exception ex = filterContext.Exception;//写到队列ExceptionQueue.Enqueue(ex);//跳转到错误页filterContext.HttpContext.Response.Redirect("/Error.html");}}

②:注销FilterConfig里原先注册的创建的异常捕获实例,添加自己定义的异常捕获代码

 public class FilterConfig{public static void RegisterGlobalFilters(GlobalFilterCollection filters){//把自己定义的异常过滤器创建一下filters.Add(new MyExceptionAttribute());//filters.Add(new HandleErrorAttribute());}}

③:在Application_Start里开启一个线程,扫描队列里有没有异常数据

            string errorFilePath = Server.MapPath("ErrorLog");//保存日志的文件夹的路径//在QueueUserWorkItem是传一个委托,类型是WaitCallback委托//在线程池里取线程ThreadPool.QueueUserWorkItem((a) =>{while (true){//判断一下队列里是不是有数据if (MyExceptionAttribute.ExceptionQueue.Count() > 0){//拿到数据Exception ex = MyExceptionAttribute.ExceptionQueue.Dequeue();if (ex != null){ILog logger = LogManager.GetLogger("errorMsg");//注意:ILog需要引用log4netlogger.Error(ex.ToString());}else{Thread.Sleep(3000);}}else{//如果队列中没有数据就让队列休息Thread.Sleep(3000);}}},errorFilePath);

④:创建一个控制器,写一个错误的代码:


效果展示:


注意重点;小心大坑,大坑!!!,我差点没出来!坑死我了

就是我们也按上面的步骤做了,为啥程序中断了,捕获不到异常。

这是因为在VS里有个中断异常处理,如果你的程序中有错误会直接让程序中断,这时我们的所用的异常处理就无法发挥作用了。

中断程序展示:

解决办法:

按照上面的做就能呈现上面的效果

大家如果想了解Asp.Net中MVC的全局异常捕获和自定义捕获请参考下面的链接

链接:https://blog.csdn.net/GreyCastle/article/details/89006972

Log4Net.dll的下载链接: https://pan.baidu.com/s/1me8ju91_JnyYf4kBbYaNBQ

提取码: wrc4


补充知识:


结尾:分享


真理惟一可靠的标准就是永远自相符合。 —— 欧文

Asp.Net中MVC中的Log4Net配置及运用相关推荐

  1. 如何在 Asp.Net Core MVC 中处理 null 值

    译文链接:https://www.infoworld.com/article/3434624/how-to-handle-null-values-in-aspnet-core-mvc.html 传统的 ...

  2. asp.net core mvc中如何把二级域名绑定到特定的控制器上

    由于公司的工作安排,一直在研究其他技术,所以一直没时间更新博客,今天终于可以停下手头的事情,写一些新内容了. 应用场景:企业门户网站会根据内容不同,设置不同的板块,如新浪有体育,娱乐频道,等等.有的情 ...

  3. ASP.NET Core MVC中的两种404错误

    我们在使用某些系统的时候,如果访问了一个不存在的地址怎么办,比如http://52abp. com/airport/fly:或者访问的地址路由和操作方法虽然存在,但是地址参数id不存在,比如https ...

  4. 007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】

    索引: 目录索引 Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Ch ...

  5. ASP.NET的MVC中使用Cookie做身份验证(附代码下载)

    场景 ASP.NET的MVC中使用Session做身份验证(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1071 ...

  6. ASP.NET Core MVC 中的 [Controller] 和 [NonController]

    Controller VS NonController 中内置的约定 在 ASP.NET Core MVC 中已经统一了 MVC 和 Web Api 及 Web Pages, 他们具有相同的 Cont ...

  7. 【18】ASP.NET Core MVC 中的 Model介绍

    ASP.NET Core MVC 中的 Model 在本视频中,我们将通过一个示例讨论 ASP.NET Core MVC 中的 Model. 我们希望最终从 Student 数据库表中查询特定的学生详 ...

  8. ASP.NET Core MVC中的 [Required]与[BindRequired]

    在开发ASP.NET Core MVC应用程序时,需要对控制器中的模型校验数据有效性,元数据注释(Data Annotations)是一个完美的解决方案. 元数据注释最典型例子是确保API的调用者提供 ...

  9. 在 ASP.NET Core MVC 中使用 Areas

    在 ASP.NET Core MVC 中使用 Areas 为什么要用 Areas 怎么用 Areas ⚠️使用注意 为什么要用 Areas 使用 Areas ,可以将应用程序中不同的业务模块分类,每个 ...

  10. php的mvc中的ajax请求参数为空,AJAX_asp.net中mvc使用ajax提交参数的匹配问题解决探讨,想到在asp.net的mvc中如果使用aja - phpStudy...

    asp.net中mvc使用ajax提交参数的匹配问题解决探讨 想到在asp.net的mvc中如果使用ajax向服务端传递参数时如果参数是一个类或者是个数组(或List集合)以及更复杂的对象时,服务端总 ...

最新文章

  1. python用os.system打开wav文件_使用python读取wav格式文件
  2. Python知识点笔记-面向对象进阶篇
  3. tampermonkey参数
  4. ubuntu 搜索文件方法(find命令)
  5. 测试站点写入文件权限代码下载
  6. Vijos 1100 (区间DP)
  7. jad 反编译eclipse操作步骤
  8. 【OpenCV学习笔记】【函数学习】三(cvGetCaptureProperty函数)
  9. linux所有内存监控,流量监控?负载监控?内存监控?IO监控?check_linux_stats全部替你搞定!...
  10. 计算机专业技术面试题
  11. 电脑误删了计算机 怎么恢复,电脑误删文件怎么恢复 电脑误删文件恢复方法【步骤介绍】...
  12. 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  13. 美团机器学习——特征工程
  14. iPhone12、iPhone12 Pro、iPhone12 Max、iPhone12 Pro Max 详细参数配置
  15. 马毅:低维模型与深度模型的殊途同归(神经网络、压缩感知和低秩分解与补全)
  16. IAR Systems
  17. Android 将文本和图片写入到pdf文件以及读取手机里的pdf文件
  18. 【梯度消失和梯度爆炸问题详解】
  19. 计算机二级C语言程序设计题+答案解析+源代码(一)
  20. 学生成绩管理系统 c++版

热门文章

  1. 七神器java游戏_七神器_手机游戏资料库_新浪游戏_新浪网
  2. 记一次黑苹果更换硬盘之旅
  3. facetime使用普及
  4. mysql 启用myisam_MySQL各存储引擎(INNODB,MyISAM等)的区别及其启动方法
  5. wps word文档生成目录的时候显示断裂会生成大纲怎么办_WPS这四个功能比Office强N倍,超级人性化...
  6. 北工大计算机学院大赛,北工大“自动捡乒乓球机器人”作品获“博创杯”大赛特等奖...
  7. 达拉姆高阶领主(经典DP)
  8. 2011,Ready!
  9. 三分钟把ChatGPT接入Siri,让你的语音助手化身智能AI
  10. 共赴 Google Cloud 2022 中国出海数字峰会,探索更多可能