博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mvc中日志的原理和使用步骤
阅读量:5735 次
发布时间:2019-06-18

本文共 3178 字,大约阅读时间需要 10 分钟。

 

日志原理 就是观察者模式(订阅发布模式) , 具体和委托很像 

 

使用步骤  在 log4net框架下

1.在Common中定义LogHelper入口类

1.定义LogHelper类namespace LTeasyOA.Common{public class LogHelper{public static Queue
ExceptionStringQueue = new Queue
();//日志消息队列public static List
LogWriterList = new List
();//接受订阅者的集合 提供入口public static void WriteLog(string exceptionText) {lock (ExceptionStringQueue){ExceptionStringQueue.Enqueue(exceptionText);}}//静态函数的调用时机,是在类被实例化或者静态成员被调用的时候进行调用,//并且是由.net框架来调用静态构造函数来初始化静态成员变量。static LogHelper() //静态构造函数 只要是调用该类的任何构造方法 或实例化 都会调用此构造方法来初始化和执行日志函数{//LogWriterList.Add(new TextFileWrite());//LogWriterList.Add(new SqlServerWriter());LogWriterList.Add(new Log4NetWriter()); //添加订阅者 和委托赋值原理一样ThreadPool.QueueUserWorkItem(o => {lock (ExceptionStringQueue){string str = ExceptionStringQueue.Dequeue();//将异常信息写到日志文件中去 但有可能是文本文件 也可能是数据库文件foreach (var ListItem in LogWriterList){ListItem.WriteLogInfo(str);}//控件在这里帮我们自动实现 有一个框架 Log4Net}});}}}

 

当然可以用多态

实现接口

namespace LTeasyOA.Common{public interface ILogWriter{void WriteLogInfo(string str);}}

 

子类实现

public class Log4NetWriter:ILogWriter    {        public void WriteLogInfo(string str)        {            ILog logWriter = log4net.LogManager.GetLogger("Demo");            logWriter.Error(str);        }    }

 

 

static LogHelper中实例化

 

 

2.

 

定义一个继承HandleErrorAttribute的子类 实现OnException()方法

namespace LTeasyOA.UI.Portal2.Models{    public class MyExceptionFilterAttribute:HandleErrorAttribute    {        public override void OnException(ExceptionContext filterContext)        {            //直接把错误写到 日志中去            base.OnException(filterContext);            Common.LogHelper.WriteLog(filterContext.Exception.ToString());        }    }}

filterConfig中添加过滤器

using LTeasyOA.UI.Portal2.Models;using System.Web;using System.Web.Mvc;namespace LTeasyOA.UI.Portal2{    public class FilterConfig    {        public static void RegisterGlobalFilters(GlobalFilterCollection filters)        {            //filters.Add(new HandleErrorAttribute());            filters.Add(new MyExceptionFilterAttribute());            //第一步            // 过滤器 目前三种  ActionFilter ResultFilter ExceptionFilter        }    }}

 

 web.config添加配置 两步

1.块配置

1 
2
3

2.log4net节点配置

global中初始化

public class MvcApplication : Spring.Web.Mvc.SpringMvcApplication    {        protected void Application_Start()        {            AreaRegistration.RegisterAllAreas();            WebApiConfig.Register(GlobalConfiguration.Configuration);            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);            RouteConfig.RegisterRoutes(RouteTable.Routes);            BundleConfig.RegisterBundles(BundleTable.Bundles);            //加载配置 初始化            log4net.Config.XmlConfigurator.Configure();        }    }

 

测试

 

大功告成!!!!!

 

转载于:https://www.cnblogs.com/lt123/p/6896698.html

你可能感兴趣的文章
使用Azcopy在Azure上进行HBase的冷热备份还原
查看>>
计组_定点数一位乘_布斯公式
查看>>
linux下使用过的命令总结(未整理完)
查看>>
ES6的一些文章
查看>>
LeetCode 198, 213 House Robber
查看>>
New Year Permutation(Floyd+并查集)
查看>>
Qt编写输入法V2018超级终结版
查看>>
<context:component-scan>详解
查看>>
DS博客作业07--查找
查看>>
[JOI2017] サッカー (Soccer)
查看>>
Git 方法
查看>>
[Python] numpy.nonzero
查看>>
2016-11-29
查看>>
C#反射的坑
查看>>
css3 box-shadow阴影(外阴影与外发光)讲解
查看>>
时间助理 时之助
查看>>
nginx快速安装
查看>>
自定义转场动画
查看>>
英国征召前黑客组建“网络兵团”
查看>>
Silverlight 2.5D RPG游戏“.NET技术”技巧与特效处理:(十二)魔法系统
查看>>