ABP(現代ASP.NET樣板開發框架)系列之1九、ABP應用層——審計日誌

點這裏進入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提供了可以爲應用程序交互自動記錄日誌的基礎設施,它能記錄你調用的方法的調用者信息和參數信息。從根本上來講,存儲區域包含:框架

  • tenant id(相關的租戶Id),
  • user id(請求用戶Id),
  • server name(請求的服務名稱【調用方法對應的類】),
  • method name(調用方法名稱),
  • parameters(方法的參數【JSON格式】),
  • execution time(執行時間),
  • duration (執行耗時時間【一般是毫秒】),
  • IP address (客戶端IP地址),
  • computer name(客戶機名稱),
  • exception (異常【若是方法拋出異常】)等信息。
  • 有了這些信息,咱們不只可以知道誰進行了操做,還可以估算出應用程序的性能及拋出的異常。甚至更多的,你能夠獲得有關應用程序的使用狀況統計。

審計系統使用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;
    }

    //...
}

如下是審計配置的屬性:

  • 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架構設計交流羣      ABP架構設計交流2羣: 579765441ABP架構設計交流羣2

 

點這裏進入ABP系列文章總目錄

相關文章
相關標籤/搜索