ABP(现代ASP.NET样板开发框架)系列之19、ABP应用层——审计日志
基于DDD的现代ASP.NET开发框架--ABP系列之19、ABP应用层——审计日志
ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。
ABP的官方网站:http://www.aspnetboilerplate.com
ABP在Github上的开源项目:https://github.com/aspnetboilerplate
维基百科定义:审计跟踪(也称为审核日志)是一个安全相关的时间顺序记录,记录这些记录的目的是为已经影响在任何时候的详细操作,提供程序运行的证明文件记录、源或事件。
ABP提供了能够为应用程序交互自动记录日志的基础设施,它能记录你调用的方法的调用者信息和参数信息。从根本上来说,存储区域包含:
- tenant id(相关的租户Id),
- user id(请求用户Id),
- server name(请求的服务名称【调用方法对应的类】),
- method name(调用方法名称),
- parameters(方法的参数【JSON格式】),
- execution time(执行时间),
- duration (执行耗时时间【通常是毫秒】),
- IP address (客户端IP地址),
- computer name(客户机名称),
- exception (异常【如果方法抛出异常】)等信息。
- 有了这些信息,我们不仅能够知道谁进行了操作,还能够估算出应用程序的性能及抛出的异常。甚至更多的,你可以得到有关应用程序的使用情况统计。
审计系统使用IAbpSession接口来获取当前用户Id和租户ID。
注意:关于IAuditingStore接口
审计系统使用IAuditingStore接口来保存审计信息。module-zero项目是这个接口的完整实现,当然你也可以通过自己的方式来实现这个接口。如果你不想自己实现这个接口,SimpleLogAuditingStore类可以直接拿来使用,它是实现方式是将审计信息写入日志中。
配置
可以在你的模块初始化方法(PreInitialize)中使用Configuration.Auditing的属性来配置审计,Auditing属性默认是启用状态(即true)。你可以禁用它,如下图所示:
public class MyModule : AbpModule
{
public override void PreInitialize()
{
Configuration.Auditing.IsEnabled = false;
} //...
}
以下是审计配置的属性:
- IsEnabled: 用于设置完全启用或禁用审计系统。默认值:true.
- IsEnabledForAnonymousUsers:如果设置成ture,未登陆的用户的审计日志也会保存。默认值: false.
- MvcControllers: 在ASP.NET MVC 控制器中使用审计日志
- IsEnabled: 在ASP.NET MVC中启用(true)或禁用(false)审计日志. 默认值: true.
- IsEnabledForChildActions: 为MVC actions启用(true)或禁用(false)审计日志. 默认值: false.
- Selectors: 选择使用其他类来处理审计日志的存储。
正如你所看到的,审计系统单独为mvc控制器提供了审计配置使之可以使用不同的方法来使用它。
Selectors是一个断言(推断类型)选择器列表,用于选择那种方式来保存审计日志。每一个选择器包含一个唯一的名称和一个断言。断言列表中默认的选择器,使用的是应用程序服务类。如下图所示:
Configuration.Auditing.Selectors.Add(
new NamedTypeSelector(
"Abp.ApplicationServices",
type => typeof (IApplicationService).IsAssignableFrom(type)
)
);
你可以在自己的模块初始化方法(PreInitialize)中添加自己的断言选择器。同样的,如果你不喜欢使用应用程序服务来保存审计日志,你也可以通过名称(name)来移除断言选择器,这就是为什么断言选择器的名称必须是唯一的(你也可以通过Linq的方式查找到选择器来移除它)。
通过属性来启用和禁用审计日志
当你使用配置项来配置断言选择器时,你可以通过使用Audited和DisableAuditing特性标记到单个类或单个方法来实现审计系统的启用和禁用。例如:
[Audited]
public class MyClass
{
public void MyMethod1(int a)
{
//...
} [DisableAuditing]
public void MyMethod2(string b)
{
//...
} public void MyMethod3(int a, int b)
{
//...
}
}
上述列子中,MyClass类中除了MyMethod2明确标记不需要审计外,其他的方法都会被审计。Audited特性能够帮助你只想保存审计日志的方法,进行审计日志保存。
说明
保存审计日志的方法必须是public修饰的,private和protected修饰的方法将会被忽略。 如果调用的方法不在类的引用范围内,那么引用的方法必须是虚方法(virtual),如果依赖注入的是它自己的接口则不需要是虚方法(例如注入 IPersonService 来使用 PersonService类)。
ABP使用动态代理和拦截机制以后,使用虚方法是必须的。对MVC Controller actions 使用审计日志不是正确的做法,因为他们可能不是虚方法。
希望更多国内的架构师能关注到ABP这个项目,也许这其中有能帮助到您的地方,也许有您的参与,这个项目可以发展得更好。
欢迎加QQ群:
ABP架构设计交流群:134710707
ABP架构设计交流2群: 579765441
ABP(现代ASP.NET样板开发框架)系列之19、ABP应用层——审计日志的更多相关文章
- ABP(现代ASP.NET样板开发框架)系列之18、ABP应用层——权限验证
点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之18.ABP应用层——权限验证 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目 ...
- ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi
点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之20.ABP展现层——动态生成WebApi ABP是“ASP.NET Boilerplate Project (ASP.N ...
- ABP(现代ASP.NET样板开发框架)系列之3、ABP分层架构
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之3.ABP分层架构 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- ABP(现代ASP.NET样板开发框架)系列之4、ABP模块系统
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之4.ABP模块系统 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- ABP(现代ASP.NET样板开发框架)系列之5、ABP启动配置
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之5.ABP启动配置 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- ABP(现代ASP.NET样板开发框架)系列之6、ABP依赖注入
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之6.ABP依赖注入 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- ABP(现代ASP.NET样板开发框架)系列之7、ABP Session管理
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之7.ABP Session管理 ABP是“ASP.NET Boilerplate Project (ASP.NET ...
- ABP(现代ASP.NET样板开发框架)系列之8、ABP日志管理
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之8.ABP日志管理 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- ABP(现代ASP.NET样板开发框架)系列之9、ABP设置管理
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之9.ABP设置管理 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
随机推荐
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
- JavaScript自定义媒体播放器
使用<audio>和<video>元素的play()和pause()方法,可以手工控制媒体文件的播放.组合使用属性.事件和这两个方法,很容易创建一个自定义的媒体播放器,如下面的 ...
- 算法与数据结构(十六) 快速排序(Swift 3.0版)
上篇博客我们主要聊了比较高效的归并排序算法,本篇博客我们就来介绍另一种高效的排序算法:快速排序.快速排序的思想与归并排序类似,都是采用分而治之的方式进行排序的.快速排序的思想主要是取出无序序列中第一个 ...
- 在Asp.Net中操作PDF – iTextSharp - 使用表格
使用Asp.Net生成PDF最常用的元素应该是表格,表格可以帮助比如订单或者发票类型的文档更加格式化和美观.本篇文章并不会深入探讨表格,仅仅是提供一个使用iTextSharp生成表格的方法介绍 使用i ...
- PHP之购物车的代码
该文章记录了购物车的实现代码,仅供参考 book_sc_fns.php <?php include_once('output_fns.php'); include_once('book_fns. ...
- Jquery(1)
鼠标点击事件: <input type="button" value="测试" onclick="test()" /> < ...
- date命令
GNU的date提供+%s(小写s), 能打印出自1970-01-01 00:00:00到当前时间的秒数. 这可能大家都不陌生,但有两点需要注意: 1. %s存在于GNU扩展版本.像在solaris等 ...
- 邻接矩阵的深度优先遍历(java版)
这是一个有向边带权的图 顶点数组:[v0, v1, v2, v3, v4] 边数组: v0 v1 v2 v3 v4 v0 6 v1 9 3 v2 2 5 v3 1 v4 package com.dat ...
- C#与yaml解析
YAML 官方网站称 YAML 是"一种所有编程语言可用的友好的数据序列化标准".YAML Ain't Markup Language,和GNU一样,YAML是一个递归着说&quo ...
- [译] 在Web API 2 中实现带JSON的Patch请求
原文链接:The Patch Verb in Web API 2 with JSON 我想在.NET4.6 Web API 2 项目中使用Patch更新一个大对象中的某个字断,这才意识到我以前都没有用 ...