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 应用的业务功能日益丰富.在线交易活动愈加频繁,新的安全问题也随之呈现:基于 ...
随机推荐
- realmswift的使用
官网:https://realm.io/ 1.说下数据库迁移的问题: 在func application(application: UIApplication, didFinishLaunchingW ...
- .Net分布式异常报警系统-服务端站点管理
管理站点 对于管理站点, 并没有太复杂的内容, 主要就是对数据库表中的数据进行维护. 管理的实体有3个 WebSite(站点信息), WebService(站点服务器信息), ErrorEntity ...
- 从语言到库到框架,再到API,再到标记最后到DSL语言
计算机技术发展很快,而且越来越快,结果也是越来越复杂,那么我们到底怎么搞定复杂性并重用代码? 很明显,这是个大难题.一开始我们要解决计算问题,发展了基本的编程语言. 很快,编程语言不能满足需求,我们需 ...
- BGP--边界网关协议
要全面了解BGP,首先我们要回答以下看上去很简单的问题:为什么需要BGP,也就是说BGP是如何产生的,它解决了什么问题.带着以上问题,我们先简单的回顾一个路由协议发展的轨迹. 首先路由的实质是描述一个 ...
- shell读取文件内容
Shell脚本,执行解释速度快.代码简单易于理解.在shell代码编写过程中,经常会用到读取文件内容. 写法一: ------------------------------------ ...
- 4-pwd 打印当前工作目录
pwd print name of current/working directory 打印当前工作目录 [语法]: pwd [选项] [参数] [功能介绍] pwd命令以绝对路径的方式显示用户当前工 ...
- display:block、display:inline与displayinline:block的概念和区别
总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素).block元素通 ...
- linux 系统下 android studio 获取SHA1
百度地图申请key的时候需要填写包名和SHA1 包名比较好找可以在 AndroidManifest.xml 文件中找到 SHA1的获取方式有两种可以在android studio 下面选择Termin ...
- 大规模数据 从SQL SERVER导入到ORACLE方法
来源于:http://blog.csdn.net/iitkd/article/details/40394789 来源:一个7G的SQL SERVER .bak文件要导入到Oracle中,经过实验,完成 ...
- Android 二维码 生成和识别(转)
原博客地址 :http://www.cnblogs.com/weixing/archive/2013/08/28/3287120.html 还有几个写的也可以参考一下:http://www.itnos ...