1. 程式人生 > >ABP(現代ASP.NET樣板開發框架)系列之19、ABP應用層——審計日誌

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

基於DDD的現代ASP.NET開發框架--ABP系列之19、ABP應用層——審計日誌

ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。

維基百科定義:審計跟蹤(也稱為稽核日誌)是一個安全相關的時間順序記錄,記錄這些記錄的目的是為已經影響在任何時候的詳細操作,提供程式執行的證明檔案記錄、源或事件。

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

相關推薦

ABP(現代ASP.NET樣板開發框架)系列19ABP應用——審計日誌

基於DDD的現代ASP.NET開發框架--ABP系列之19、ABP應用層——審計日誌 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 維基百科定義:審計跟蹤(也稱為稽核日誌)是一個安全相關的時間順序記錄,記錄這些記錄的

ABP(現代ASP.NET樣板開發框架)系列10ABP領域——實體

基於DDD的現代ASP.NET開發框架--ABP系列之10、ABP領域層——實體 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由深圳-Carl提供翻譯 實體是DDD(領域驅動設計)的核心概念之一。Eric Eva

ABP(現代ASP.NET樣板開發框架)系列4ABP模組系統

基於DDD的現代ASP.NET開發框架--ABP系列之4、ABP模組系統 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。  本文由東莞-天道提供翻譯  ABP模組系統簡介 ABP框架提供了建立和組裝模組的基礎,一個模組

ABP(現代ASP.NET樣板開發框架)系列6ABP依賴注入

基於DDD的現代ASP.NET開發框架--ABP系列之6、ABP依賴注入 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。  本文由 上海-半冷 提供翻譯 什麼是依賴注入 如果你已經知道依賴注入的概念,建構函式和屬性注入

ABP(現代ASP.NET樣板開發框架)系列9ABP設定管理

基於DDD的現代ASP.NET開發框架--ABP系列之9、ABP設定管理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由山東-李偉提供翻譯 介紹 每個應用程式需要儲存一些設定並在應用程式的某個地方使用這些設定。

ABP(現代ASP.NET樣板開發框架)系列2ABP入門教程

基於DDD的現代ASP.NET開發框架--ABP系列之2、ABP入門教程 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 ASP.NET Boilerplate是一個用最佳實踐和流行技術開發現代WEB應用程式的新起點,它旨在成為一個通用的

ABP(現代ASP.NET樣板開發框架)系列17ABP應用——引數有效性驗證

基於DDD的現代ASP.NET開發框架--ABP系列之17、ABP應用層——引數有效性驗證 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 應用程式的輸入資料首先應該被檢驗是否有效。輸入的資料能被使用者或其他應用程式提

ABP(現代ASP.NET樣板開發框架)系列16ABP應用——資料傳輸物件(DTOs)

基於DDD的現代ASP.NET開發框架--ABP系列之16、ABP應用層——資料傳輸物件(DTOs) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 資料傳輸物件(Data Transfer Objects)用於應用層

ABP(現代ASP.NET樣板開發框架)系列13ABP領域——資料過濾器(Data filters)

基於DDD的現代ASP.NET開發框架--ABP系列之13、ABP領域層——資料過濾器(Data filters) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 介紹 在資料庫開發中,我們一般會運用軟刪除(soft

ABP(現代ASP.NET樣板開發框架)系列21ABP展現——Javascript函式庫

基於DDD的現代ASP.NET開發框架--ABP系列之21、ABP展現層——Javascript函式庫 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 ASP.NET Boilerplate的js庫提供了一些讓java

ABP(現代ASP.NET樣板開發框架)系列14ABP領域——領域事件(Domain events)

基於DDD的現代ASP.NET開發框架--ABP系列之14、ABP領域層——領域事件(Domain events) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 在C#中,一個類可以定義其專屬的事件並且其它類可以註冊該事

ABP(現代ASP.NET樣板開發框架)系列5ABP啟動配置

基於DDD的現代ASP.NET開發框架--ABP系列之5、ABP啟動配置 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。  本文由 東莞-天道 提供翻譯 譯者注:在看這一節的內容之前,建議大家先下載module-ze

ABP(現代ASP.NET樣板開發框架)系列3ABP分層架構

基於DDD的現代ASP.NET開發框架--ABP系列之3、ABP分層架構 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 前言 為了減少複雜性和提高程式碼的可重用性,採用分層架構是一種被廣泛接受的技術。為了實現分層的

ABP(現代ASP.NET樣板開發框架)系列15ABP應用——應用服務(Application services)

基於DDD的現代ASP.NET開發框架--ABP系列之15、ABP應用層——應用服務(Application services) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由東莞-天道提供翻譯 應用服務用於將領

ABP(現代ASP.NET樣板開發框架)系列23ABP展現——異常處理

基於DDD的現代ASP.NET開發框架--ABP系列之23、ABP展現層——異常處理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 在 web 應用程式中,異常通常是在 MVC Controller actions

ABP(現代ASP.NET樣板開發框架)系列8ABP日誌管理

基於DDD的現代ASP.NET開發框架--ABP系列之8、ABP日誌管理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由東莞-天道提供翻譯 Server side(伺服器端) ASP.NET Boilerpla

ABP(現代ASP.NET樣板開發框架)系列1ABP總體介紹

基於DDD的現代ASP.NET開發框架--ABP系列之1、ABP總體介紹 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 ASP.NET Boilerplate是一個用最佳實踐和流行技術開發現代WEB應用程式的新起點,它旨在成為一個通用的

ABP(現代ASP.NET樣板開發框架)系列12ABP領域——工作單元(Unit Of work)

基於DDD的現代ASP.NET開發框架--ABP系列之12、ABP領域層——工作單元(Unit Of work) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 通用連線和事務管理方法 連線和事務管理是使用資料庫的應用程

ABP(現代ASP.NET樣板開發框架)系列22ABP展現——導航欄設定

基於DDD的現代ASP.NET開發框架--ABP系列之22、ABP展現層——導航欄設定 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 每一個WEB應用程式都有導航選單,Abp也為使用者提供了通用的建立和顯示選單方式。

ABP(現代ASP.NET樣板開發框架)系列7ABP Session管理

基於DDD的現代ASP.NET開發框架--ABP系列之7、ABP Session管理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 簡介 如果一個應用程式需要登入,則它必須知道當前使用者執行了什麼操作。因此ASP.