點這裏進入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