ExceptionLess新玩法 -- 审计日志
审计日志
这算是一个挺酷的功能,把每个请求都记录下来,之前在abp中看到过这个功能,配合可视化的界面,简直是在装逼
看到了exceptionless后,心念一动,我也可以根据它做一个审计日志的功能。这里需要一些MVC过滤器的知识,不同的同学请谷歌查一下资料。
Next
使用过滤器, 在action执行完毕后执行此方法,首先创建一个attribute继承自ActionFilterAttribute重写OnActionExecuted方法,使用action名称做为Message使用Controller名称做为标签进行记录,关于到底要记录一些什么,就根据各位项目的需求了。
/// <summary>
/// Mvc action执行前后处理
/// </summary>
public class MvcActionProcessFilterAttribue : ActionFilterAttribute
{
/// <summary>
/// 方法执行后进行的操作
/// </summary>
/// <param name="filterContext"></param>
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项目记录的信息这么丰富,当然大家可以自行完善。博主就进行了这样的完善。
ExceptionLess新玩法 -- 审计日志的更多相关文章
- ExceptionLess新玩法 — 记日志
ExceptionLess 之前也有介绍过这个框架,其实网上也有很多的资料,无论是部署还是一些详细的高级玩法都讲的很清楚也很棒,博主也学习了一些他们的博文,因为很多的东西比如本地部署别人已经写了,我再 ...
- 自定义 checkbox 新玩法 ?
自定义 checkbox 新玩法 ? 第一步:selector 编写 drawable/selector_checkbox_voice.xml <?xml version="1.0&q ...
- 【转帖】Moodle平台的5个新玩法
[玩坏Moodle平台]Moodle平台的5个新玩法 1.RSS订阅 Moodle平台可以导入外部博客(或其他提供RSS的服务),并显示在Moodle内置的博客系统中.无论是自己的个人网站还是他人的博 ...
- Odoo 库存管理-库存移动(Stock Move)新玩法
库存移动(Stock Move)新玩法 Odoo的库存移动不仅仅是存货在两个“存货地点”之间的移动的基本概念了,他们可以被“串联”在一起,可以用来生成或改变其对应的拣货单 (Picking).链式库存 ...
- MySQL高可用新玩法之MGR+Consul
前面的文章有提到过利用consul+mha实现mysql的高可用,以及利用consul+sentinel实现redis的高可用,具体的请查看:http://www.cnblogs.com/gomysq ...
- 摹客iDoc「标注」新玩法!这些细节让你爱不释手(201903-2版本更新)
哈喽小伙伴们,我们又见面啦!没错,小摹就是来告诉大家:摹客iDoc又双叒叕升级了!这次又上线了许多新玩法,在此之前,小摹先带大家温习一下iDoc以往的知识点: 攻城狮查看标注的利器 —— 标注信息智能 ...
- Chrome 控制台新玩法-向输出到console的文字加样式
Chrome 控制台新玩法-向输出到console的文字加样式 有兴趣的同学可以文章最后的代码复制贴到控制台玩玩. Go for Code 在正常模式下,一般只能向console 控制台输出简单的文字 ...
- Github 新玩法 -- Profile ReadMe
Github 新玩法 -- Profile ReadMe Intro 今天刷 Github 的时候偶然发现一个新的玩法,Github Profile ReadMe,可以在个人的 Profile 页面展 ...
- WEB安全新玩法 [1] 业务安全动态加固平台
近年来,信息安全体系建设趋于完善,以注入攻击.跨站攻击等为代表的传统 Web 应用层攻击很大程度上得到了缓解.但是,Web 应用的业务功能日益丰富.在线交易活动愈加频繁,新的安全问题也随之呈现:基于 ...
随机推荐
- jboss EAP 6.2 + Message Drive Bean(MDB) 整合IBM Webshpere MQ 7.5
上一篇我们知道了消息驱动Bean的基本用法,实际大型分布式企业应用中,往往会采用高性能的商业Queue产品,比如IBM Webshpere MQ(目前最新版本是7.5 ),下面讲解下如何在Jboss ...
- centos6-honeyd安装&配置
安装 需要装 libpcap libevent libdnet 等(!) 有些用的yum,有些下载的安装包手动安装 (wget tar configure make install 非常linux) ...
- 在使用EF Code First开发时,遇到的“关系”问题,以及解决方法
Entity Framework Code First 简称 EF CF也行,就是在开发的时候,以代码先行的原则,开发人员无需考虑 数据库端的一些问题(开发过程中基本不需要在数据库管理器上操作) 言归 ...
- ASP.NET MVC运行机制源码剖析
我们都知道ASP.NET首先是从Global.aspx中开始运行的, 在Application_Start()中添加路由映射后, 就由URLRouting组件创建IRouteHandler并执行, 在 ...
- Tensorflow学习笔记3:TensorBoard可视化学习
TensorBoard简介 Tensorflow发布包中提供了TensorBoard,用于展示Tensorflow任务在计算过程中的Graph.定量指标图以及附加数据.大致的效果如下所示, Tenso ...
- Sql 2012 远程数据库连接
新装好的数据库,各种远程连接设置都设置好后.发现还是连接不上. 这时候,问题可能出在端口上,远程连接的时候需要指明端口.动态端口一般都会变.在本机连接时候,会自动选择端口.在远程访问时候,就必须要指明 ...
- 用matlab实现同一个序列重复N倍
同一个序列 重复N倍 怎么用matlab实现 可以使用repmat函数 repmat(A, 1, 3) 其中A即为复制的矩阵,1为纵向复制的次数,3即为横向复制的次数.
- Hibernate 的dialect 大全
RDBMS 方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS3 ...
- 基本数据类型-集合(set)_上周内容回顾(字符串_数字_列表_元组_字典_集合)
上周内容回顾 1.字符串 2.数字 除了布尔类型外,int.long.float和complex都可以使用的运算为:加.减.乘.除.整除.幂运算和取余 3.列表和元组 列表的内容可变,可以包含任意对象 ...
- AngularJS指令的详解
指令作为AngularJS中最为重要的部分,所以这个框架本身也是自带了比较多的的指令,但是在开发中,这些指令通常不能满足我们的需要,所以我们也是需要自定义一些指令的.指令是我们用来扩展浏览器能力的技术 ...