点这里进入ABP系列文章总目录html
基于DDD的现代ASP.NET开发框架--ABP系列之1九、ABP应用层——审计日志
git
ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。github
ABP的官方网站:http://www.aspnetboilerplate.com安全
ABP在Github上的开源项目:https://github.com/aspnetboilerplate架构
维基百科定义:审计跟踪(也称为审核日志)是一个安全相关的时间顺序记录,记录这些记录的目的是为已经影响在任什么时候候的详细操做,提供程序运行的证实文件记录、源或事件。mvc
ABP提供了可以为应用程序交互自动记录日志的基础设施,它能记录你调用的方法的调用者信息和参数信息。从根本上来讲,存储区域包含:框架
审计系统使用IAbpSession接口来获取当前用户Id和租户ID。ide
注意:关于IAuditingStore接口性能
审计系统使用IAuditingStore接口来保存审计信息。module-zero项目是这个接口的完整实现,固然你也能够经过本身的方式来实现这个接口。若是你不想本身实现这个接口,SimpleLogAuditingStore类能够直接拿来使用,它是实现方式是将审计信息写入日志中。网站
能够在你的模块初始化方法(PreInitialize)中使用Configuration.Auditing的属性来配置审计,Auditing属性默认是启用状态(即true)。你能够禁用它,以下图所示:
public class MyModule : AbpModule { public override void PreInitialize() { Configuration.Auditing.IsEnabled = false; } //... }
如下是审计配置的属性:
正如你所看到的,审计系统单独为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