在MVC使用Log4Net
来源:互联网 发布:网络学习论坛发帖 编辑:程序博客网 时间:2024/06/06 08:19
1.我们的网站发布之后还是有可能出现很多的错误,这个时候我们不可能加断点进行调试,这能根据日志里面的错误信息进行调试
2.我们首先想到,用户访问网站出错后,我们将错误信息记录到日志里面去,但是多用户并发访问,多线程同时写入日志会出错,我们自然想到写入日志时,加上一把锁lock
3.加上锁后,会遇到用户等待相应的情况,因此我们就想,将错误消息,先放到一个消息队列中去,这样就能够及时响应用户了,然后我们开辟一个线程,不停的从错误消息队列中取得消息,写入到日志中去
4.我们的日志记录到什么地方也是不一定的,可能放到数据库,或者保存到一个txt文件中,这时候就用到我们的观察者模式了,log4net就是这样做的(一个帮助程序员将日志信息输出到各种目标(控制台、文件、数据库等)的工具)下面是具体操作
第一步:配置文件
<configSections><!--Log4net的块配置--> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections>
<!--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="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" /> <param name="日志开始" value="----------------------header--------------------------" /> <param name="日志结束" 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程序集
//从配置文件读取log4net的配置,然后进行一个初始化工作。 log4net.Config.XmlConfigurator.Configure();
第三步:我们使用观察者模式,可以任意切换写日志到不同的地方(.txt,关系型数据库,MongoDB等)
3.1 先申明一个写入接口
namespace Company.OA.Common{ public interface ILogWriter { void WriteLogInfo(string txt); }}
3.2 写入到.txt
public class Log4NetWriter : ILogWriter { public void WriteLogInfo(string txt) { ILog logWriete = log4net.LogManager.GetLogger("Demo"); logWriete.Error(txt); } }
3.3 观察者模式进行写入(这个观察者是用集合写的)
public class LogHelper { public static Queue<string> ExceptionStringQueue = new Queue<string>(); public static List<ILogWriter> LogWriterList = new List<ILogWriter>(); static LogHelper() { LogWriterList.Add(new Log4NetWriter()); //把从队列中获取错误消息写到 日志文件里面去。 ThreadPool.QueueUserWorkItem(o => { while (true) { lock (ExceptionStringQueue) { if (ExceptionStringQueue.Count > 0) { string str = ExceptionStringQueue.Dequeue(); //把异常信息 写到 日志文件里面去。 //变化点:有可能写到日志文件,有可能写到数据库里面去。有可能两个地方都写。 foreach (var logWriter in LogWriterList) { logWriter.WriteLogInfo(str); } } else { Thread.Sleep(30); } } } }); } //把错误消息写到写到队列中 public static void WriteLog(string exceptionText) { lock (ExceptionStringQueue) { ExceptionStringQueue.Enqueue(exceptionText); } } }4.在Models里面创建一个类,不断将错误消息加入到日志中
public class MyExceptionFilterAttribut : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { base.OnException(filterContext); //自己处理异常 //直接把错误信息写到日志文件里面去。 Common.LogHelper.WriteLog(filterContext.Exception.ToString()); } }
因此我们要在App_Start中将添加过滤
filters.Add(new MyExceptionFilterAttribut());
这样我们就成功了!
0 0
- 在MVC使用Log4Net
- log4net在.net MVC中的简单使用
- MVC中使用Log4net
- log4net在C# web开发中的使用(MVC)
- Log4net在MVC中的应用
- 在ASP.NET MVC中使用Log4Net进行多种HttpCode日志的记录
- MVC Log4net
- ASP.NET MVC中使用Log4Net
- 在C#中使用LOG4NET
- 在C#中使用LOG4NET
- 在C#中使用LOG4NET
- log4net在项目中使用
- log4net在vs2015中的使用
- Log4Net 在项目中的使用
- 在asp.net中使用 log4net 笔记
- 在.net开发中使用Log4Net组件
- 在.net开发中使用Log4Net组件
- 在.net开发中使用Log4Net组件
- 一篇实用的Latex的入门教程
- 杭电-5569-动太规划
- scikit-learn的主要模块和基本使用
- Letter Combinations of a Phone Number
- QT 模拟鼠标点击的例子
- 在MVC使用Log4Net
- linux 查看elf相关命令
- Oracle 设定允许访问的IP地址
- 简单c语言习题:矩阵求乘积
- 无线路灯项目——SIM900A调试
- 山东省第四届蓝桥杯 ///题目标题: 高斯日记//c/c++组
- opencv CvArr、Mat、CvMat、IplImage、BYTE之间的转换
- 全局获取Context的方法
- python build-in functions