审计日志

这算是一个挺酷的功能,把每个请求都记录下来,之前在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新玩法 -- 审计日志的更多相关文章

  1. ExceptionLess新玩法 — 记日志

    ExceptionLess 之前也有介绍过这个框架,其实网上也有很多的资料,无论是部署还是一些详细的高级玩法都讲的很清楚也很棒,博主也学习了一些他们的博文,因为很多的东西比如本地部署别人已经写了,我再 ...

  2. 自定义 checkbox 新玩法 ?

    自定义 checkbox 新玩法 ? 第一步:selector 编写 drawable/selector_checkbox_voice.xml <?xml version="1.0&q ...

  3. 【转帖】Moodle平台的5个新玩法

    [玩坏Moodle平台]Moodle平台的5个新玩法 1.RSS订阅 Moodle平台可以导入外部博客(或其他提供RSS的服务),并显示在Moodle内置的博客系统中.无论是自己的个人网站还是他人的博 ...

  4. Odoo 库存管理-库存移动(Stock Move)新玩法

    库存移动(Stock Move)新玩法 Odoo的库存移动不仅仅是存货在两个“存货地点”之间的移动的基本概念了,他们可以被“串联”在一起,可以用来生成或改变其对应的拣货单 (Picking).链式库存 ...

  5. MySQL高可用新玩法之MGR+Consul

    前面的文章有提到过利用consul+mha实现mysql的高可用,以及利用consul+sentinel实现redis的高可用,具体的请查看:http://www.cnblogs.com/gomysq ...

  6. 摹客iDoc「标注」新玩法!这些细节让你爱不释手(201903-2版本更新)

    哈喽小伙伴们,我们又见面啦!没错,小摹就是来告诉大家:摹客iDoc又双叒叕升级了!这次又上线了许多新玩法,在此之前,小摹先带大家温习一下iDoc以往的知识点: 攻城狮查看标注的利器 —— 标注信息智能 ...

  7. Chrome 控制台新玩法-向输出到console的文字加样式

    Chrome 控制台新玩法-向输出到console的文字加样式 有兴趣的同学可以文章最后的代码复制贴到控制台玩玩. Go for Code 在正常模式下,一般只能向console 控制台输出简单的文字 ...

  8. Github 新玩法 -- Profile ReadMe

    Github 新玩法 -- Profile ReadMe Intro 今天刷 Github 的时候偶然发现一个新的玩法,Github Profile ReadMe,可以在个人的 Profile 页面展 ...

  9. WEB安全新玩法 [1] 业务安全动态加固平台

    近年来,信息安全体系建设趋于完善,以注入攻击.跨站攻击等为代表的传统 Web 应用层攻击很大程度上得到了缓解.但是,Web 应用的业务功能日益丰富.在线交易活动愈加频繁,新的安全问题也随之呈现:基于 ...

随机推荐

  1. nios II--实验7——数码管IP软件部分

    软件开发 首先,在硬件工程文件夹里面新建一个software的文件夹用于放置软件部分:打开toolsàNios II 11.0 Software Build Tools for Eclipse,需要进 ...

  2. [BZOJ1116][Poi2008]LCO(并查集)

    题目:http://hzwer.com/3010.html 分析:注意这里无向边是对入度没有贡献的. 那么对于一个n个点的连通块而言,如果它是一颗树(n-1条边),那么把所有边全部从某个根开始向下指, ...

  3. Excel——将内容导入

    1.写入Excel文件的操作引入Microsoft.Office.Tools.Excel.dll 程序集 List<Person> list = new List<Person> ...

  4. 检查URL地址脚本

    方法一: [root@Centos-6 script]# vi check_url_01.sh #!/bin/sh #this script is created by nulige #check u ...

  5. 怎样设置Word下次打开时跳转到上次阅读的位置

    ①我们启动Word2013,打开需要阅读的文档,当阅读完毕之后,在指定位置键入一个空格,然后按下Delete键删除,这样相当于是没有作任何更改. ②保存文档,单击文件--另存为,选择好路径,将文档保存 ...

  6. PHP中生成json信息的方法

    <?php //php中生成json信息 //json_encode(数组/对象) $color = array('red','blue','green'); //[索引数组] echo jso ...

  7. 运维mysql基础

    1 mysql简介 一般写某个东西先介绍一下,我就老生常谈的简单介绍下(摘自维基百科) https://zh.wikipedia.org/wiki/MySQL MySQL(官方发音为英语发音:/maɪ ...

  8. chrome 26.0.XXX版本下media query流媒体查询有问题的bug

    这段代码什么意思: @media only screen and (max-width: 1360px)  当用户的界面小于等于1360px的时候, 会加载该流媒体样式(此时的界面是包含滚动条的): ...

  9. 强制重启N种方法

    强制重启N种方法 2015-12-24 17:19 146人阅读 评论(0) 收藏 举报 本文章已收录于:   分类: 驱动开发学习(458) 作者同类文章X 1. 无意中看到一种通过控制92H端口b ...

  10. 怎么学习AOPR使用方法

    Advanced Office Password Recovery作为一款专业级别的Office密码破解工具,对十几种office文档的密码都可以有效的破解.一些用户朋友才开始接触Advanced O ...