ABP官方文檔翻譯 4.6 審計日誌
審計日誌
- 介紹
- 關於IAuditingStore
- 配置
- 通過特性啟用/禁用
- 註意事項
介紹
維基百科:“審計追蹤(也稱為審計日誌)是與安全相關的按時間先後的記錄、記錄集合、記錄的目的地和源,提供一系列活動的紀實證據,這些活動可能在任何時刻影響一個特定操作、過程或事件。”
ABP提供了基礎設施自動記錄應用所有的交互。它可以記錄方法調用的調用者和參數。
基本上,保存的字段有:相關的tenant id,調用者user id,調用者service name(調用方法的類),調用者method name,執行parameters(序列化為JSON),執行時間
有了這些信息,我們就可以知道誰執行了這個操作,也可以衡量應用的執行性能和檢查拋出的異常。還可以得到你的應用的使用統計。
審計系統使用IAbpSession獲得當前的UserId和TenantId。
應用服務、MVC控制器、Web APID和ASP.NET Core方法默認自動審計。
關於IAuditingStore
審計系統使用IAuditingStore保存審計信息。你可以用自己的方式來實現這個接口,但在module-zero工程中已完全實現。如果你沒實現它,可以使用SimpleLogAuditingStore,它會把審計信息寫到日誌中。
配置
要配置審計,可以在模塊的PreInitialize方法中使用Configuration.Auditing屬性。審計默認是啟用的。可以按如下的方式禁用:
public class MyModule : AbpModule { public override void PreInitialize() { Configuration.Auditing.IsEnabled = false; } //... }
這裏有審計配置屬性的列表:
- IsEnabled:用來完全啟用或禁用審計系統。默認為:true。
- IsEnabledForAnoymousUsers:如果設置為true,對那些沒有登錄到系統的用戶也會保存審計日誌。默認為:false。
- Selectors:用來選擇其他類保存審計日誌。
Selectors是一個術語列表用來選擇其他類型保存審計日誌。一個selector有一個唯一的名稱和一個術語。默在這個列表中唯一的默認selector用來選擇應用服務類。它的定義如下所示:
Configuration.Auditing.Selectors.Add( new NamedTypeSelector( "Abp.ApplicationServices", type => typeof (IApplicationService).IsAssignableFrom(type) ) );
可以在模塊的PreInitialize方法中添加selectors。如果你不喜歡應用服務保存審計日誌,可以通過名稱移除selector。這就是有一個唯一名稱的原因(如果你想的話,可以使用簡單的LINQ在selectors中查找selector並移除它)。
註意:除了標準的審計配置,MVC和ASP.NET Core模塊定義了配置來啟用或禁用方法的審計日誌。
通過特性啟用/禁用
你可以通過配置,選擇需要審計的類,你也可以給一個類、方法使用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特性可以用於一個方法,這樣就可以只給想要審計的方法進行審計了。
DisableAuditing可以用於DTO的一個屬性。因此,你可以在審計日誌裏隱藏敏感輸入,如密碼。
註意事項
- 為了保存設計日誌,方法必須為public。Private和Protected方法會被忽略。
- 如果通過類引用調用,方法必須為virtual。如果使用它的接口(如註入IPersonService接口來使用PersonService類)註入,這就不要了。因為ABP使用動態代理和來接,所以這是需要的。對於MVC控制器方法,這不是真的。他們不能為virtual。
返回主目錄
ABP官方文檔翻譯 4.6 審計日誌