log4net在C# web开发中的使用(MVC)
来源:互联网 发布:手机识数软件 编辑:程序博客网 时间:2024/05/22 06:37
1、新建一个mvc项目
2、添加对log4Net.dll的引用
3、在configSections中添加如下配置节点:
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
4、紧靠configSections添加如下配置信息
<log4net> <root> <level value="ALL"/> <appender-ref ref="SysAppender"/> </root> <!-- Print only messages of level DEBUG or above in the packages --> <logger name="WebLogger"> <!--这里进一步限制了日志级别,只有在大于等于DEBUG情况下才会记录日志--> <level value="DEBUG"/> </logger> <!--指定日志记录的方式:以滚动文件的方式--> <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net" > <!--指定日志存放的路径,这里放置到App_Data目录是为了安全--> <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="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>
5、初始化在程序开始加入
log4net.Config.XmlConfigurator.Configure();
protected void Application_Start() { log4net.Config.XmlConfigurator.Configure(); AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); }
6、在需要打印日志的地方添加
LogManager.GetLogger(typeof(Program)).Debug("信息");
考虑到记录日志会存在并发的问题,这里通过队列的方式记录日志。
思路:把所有的日志信息放在一个队列里面,通过新建一个线程不断地从这个队列读取异常信息,然后往日志里面写。(也就是所谓的生产者-消费者模式)。
7、新建一个类MyErrorAttribute
public class MyErrorAttribute:HandleErrorAttribute { public static Queue<Exception> ExceptionQueue = new Queue<Exception>(); public override void OnException(ExceptionContext filterContext) { ExceptionQueue.Enqueue(filterContext.Exception); base.OnException(filterContext); } }
8、在FilterConfig进行一下修改
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { //filters.Add(new HandleErrorAttribute());//注释掉系统默认的 filters.Add(new MyErrorAttribute());//添加刚才自定义的 }
9、在Global.asax文件中的Application_Start()方法中添加如下代码:
protected void Application_Start() { log4net.Config.XmlConfigurator.Configure(); AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); ThreadPool.QueueUserWorkItem(o => { while (true) { if (MyErrorAttribute.ExceptionQueue.Count > 0) { Exception ex = MyErrorAttribute.ExceptionQueue.Dequeue(); if (ex != null) { ILog logger = LogManager.GetLogger("testError"); logger.Error(ex.ToString()); //将异常信息写入Log4Net中 } else { Thread.Sleep(50); } } else { Thread.Sleep(50); } } }); }
10、故意添加一个测试控制器方法 ActionResult
public ActionResult TestLog() { int result = 0; int x = 1, y = 0; result = x / y; return View(); }
在浏览器访问后会在App_Data目录下生成日志文件
----------------------header-------------------------2017-07-10 22:30:50,280 [9] ERROR testError - System.DivideByZeroException: 尝试除以零。 在 Log4NetDemo.Controllers.HomeController.TestLog() 位置 c:\Users\22475\Documents\Visual Studio 2013\Projects\Log4NetDemo\Log4NetDemo\Controllers\HomeController.cs:行号 16 在 lambda_method(Closure , ControllerBase , Object[] ) 在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() 在 System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) 在 System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 在 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 在 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) 在 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) 在 System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 在 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) 在 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) 在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
阅读全文
1 0
- log4net在C# web开发中的使用(MVC)
- log4net在.net MVC中的简单使用
- 在MVC使用Log4Net
- Log4net在MVC中的应用
- 在C#中使用LOG4NET
- 在C#中使用LOG4NET
- 在C#中使用LOG4NET
- log4net在vs2015中的使用
- Log4Net 在项目中的使用
- 在C#代码中应用Log4Net(一)简单使用Log4Net
- 在C#代码中应用Log4Net(一)简单使用Log4Net
- 学习在Web中使用log4net
- c# log4net在项目中使用实例
- 在C#的类库中使用log4net
- c# log4net在项目中使用实例
- MVC中使用Log4net
- 在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常
- 在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常
- 最快让你上手ReactiveCocoa之进阶篇
- php mysql索引的类型和优缺点
- Eclipse执行junit测试时出现Errors occurred during the build. Errors running builder 'Integrated External Too
- [CF822E]Liar
- 聚合项目web项报红色感叹号
- log4net在C# web开发中的使用(MVC)
- LeetCode: 167. Two Sum II
- Mysql中日期处理
- iOS学习路线图
- hadoop 初探
- web app开发入门
- HDOJ 1176 免费馅饼(DP)
- LAMPer技能树
- 【“盛大游戏杯”第15届上海大学程序设计联赛 I】【必胜必败博弈】丢史蒂芬妮