博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ExceptionLess新玩法 -- 审计日志
阅读量:7044 次
发布时间:2019-06-28

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

审计日志

这算是一个挺酷的功能,把每个请求都记录下来,之前在abp中看到过这个功能,配合可视化的界面,简直是在装逼

看到了exceptionless后,心念一动,我也可以根据它做一个审计日志的功能。这里需要一些MVC过滤器的知识,不同的同学请谷歌查一下资料。

 

Next

使用过滤器, 在action执行完毕后执行此方法,首先创建一个attribute继承自ActionFilterAttribute重写OnActionExecuted方法,使用action名称做为Message使用Controller名称做为标签进行记录,关于到底要记录一些什么,就根据各位项目的需求了。

///     /// Mvc action执行前后处理    ///     public class MvcActionProcessFilterAttribue : ActionFilterAttribute    {        ///         /// 方法执行后进行的操作        ///         ///         public override void OnActionExecuted(ActionExecutedContext filterContext)        {            //记录审记日志              var con = filterContext.Controller as Controller;                       var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;            var actionName = filterContext.ActionDescriptor.ActionName;                     ExceptionlessClient.Default.CreateFeatureUsage(actionName).AddTags(controllerName).Submit();        }    }
 

 

可能会有很多个Web项目,一个项目去写一个肯定是不明智的,这里我把审计日志和FilterConfig放到了基础设施层,方便Web项目使用,使用起来很简单,只需要在Global添加几行短短的代码就一切搞定了,博主的图中exceptionlesskey之所以这么设置,是因为线上和测试版肯定是不同的,所以放到了配置文件中进行维护。

 

玩法升级

上面已经完善的很好了,看起来也很棒。。但是让人一脸懵逼的是,打开页面看到的是这样的。嗯一堆方法名没有问题,但是第一眼望去我并不知道这是做什么的啊。。这就有点尴尬了,如果能把方法上的注释放上去是不是就完美了?动手开搞吧。

 

比较尴尬的是,注释在编译后是会消失的,而且通过代码是拿不到方法上的注册的,不像特性一样。当然解决方案总是会有的,我们右击项目,属性,生成,输出XML文档。

这样就可以读取文档根据action和contrller去拿到我们想要的注释了,因为每个项目的文档名是不一样的(当然可以设置成一样,所以我后面说的话可以选择忽视)我在webconfig中配置了每个项目的名称,然后拿到名称后去读取XML文件,这个时候我们想要的注释就已经拿到了

var proejctName = ConfigurationManager.AppSettings["ProjectName"] as string;            //拿到包含注释的xml文档            var xml = XDocument.Load(con.Server.MapPath(@"~/bin/" + proejctName + ".XML"));            var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;            var actionName = filterContext.ActionDescriptor.ActionName;            //拿到方法上的注释            //拿到方法上的注释没有参数的方法没有(括号            var summary = (from member in xml.Elements("doc").Elements("members").Elements("member") where member.Attribute("name").Value.ToString().Contains("." + controllerName + "Controller." + actionName + "(") select member.Element("summary").Value).FirstOrDefault() ??                         (from member in xml.Elements("doc").Elements("members").Elements("member") where member.Attribute("name").Value.ToString().Contains("." + controllerName + "Controller." + actionName) select member.Element("summary").Value).FirstOrDefault();

看一下效果,嗯,不错是我想要的。

 

 

结束语,上面皆是MVC项目的做法,而在webApi中则需要再去写一个相应的过滤器,而exceptionless对webapi的支持也不是那么完全,比如request的参数和信息就不会被记录下来,所以看起来没有Mvc项目记录的信息这么丰富,当然大家可以自行完善。博主就进行了这样的完善。

转载于:https://www.cnblogs.com/LiangSW/p/6027026.html

你可能感兴趣的文章
[AX 2012] Woker user request
查看>>
Android-LinearLayout布局技巧(二)
查看>>
黄页js-sdk开发总结分享
查看>>
程序员应该知道的10大编程格言
查看>>
EasyUI的combobox组件Chrome浏览器不兼容问题解决办法
查看>>
JAVA实现二叉树
查看>>
如何制作iso文件
查看>>
构建openssl debug版
查看>>
jquery 的datatables插件问题
查看>>
Putty密钥(PrivateKey)导入SecureCRT
查看>>
移动环境下DNS解析失败后的优化方案
查看>>
TeeChart的最小步长和最大步长
查看>>
spring+springMVC中使用@Transcational方式管理事务的必须要配的东西。
查看>>
网络全民创业:95%电商生活得非常痛苦
查看>>
三种方法写监听事件
查看>>
hdu 2899 hdu 3400 三分/几何
查看>>
[转]World Wind学习总结一
查看>>
算法题一道
查看>>
滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(4月14日)...
查看>>
iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)
查看>>