myesn

myEsn2E9

hi
github

ABP: 監査ログ

image

EF Core ストレージを使用する場合、Abp の監査ログは最終的に以下の 4 つのタイプに対応するテーブルに保存されます:
AuditLog、AuditLogAction、EntityChanges、EntityPropertyChanges の属性説明は参考:https://docs.abp.io/en/abp/latest/Audit-Logging#audit-log-object

公式には詳細に記載されていますが、この記事では注意すべき点のみを記録します:

  1. デフォルトでは HTTP Get リクエストの監査ログは記録されません。設定を有効にするには AbpAuditingOptions..IsEnabledForGetRequests = true;
  2. ApplicationName 設定を変更するには AbpAuditingOptions..ApplicationName = "";
  3. デフォルトではエンティティ変更の記録は無効になっており、つまり AbpEntityChangesAbpEntityPropertyChanges の 2 つのテーブルには記録がありません。有効にするには参考:https://docs.abp.io/en/abp/latest/Audit-Logging#entity-history-selectors
  4. 特定の URL パスの監査ログ記録を無視するには、参考:https://docs.abp.io/en/abp/latest/Audit-Logging#abpaspnetcoreauditingoptions
  5. デフォルトで監査ログが有効な場所:すべてのコントローラーアクションのリクエストログ、Get リクエストを除く、参考 AbpAuditingOptions.IsEnabledForGetRequests;すべてのアプリケーションサービスの呼び出しログ、前提としてインターフェースとサービスは IApplicationServiceApplicationService を継承する必要があります。これを Application Service と呼びます。
  6. デフォルトですべてのコントローラーアクションのリクエストログを記録します。
  7. コントローラーまたはコントローラーアクションに [DisableAuditing] 属性を追加して監査ログを無効にするには、参考:https://docs.abp.io/en/abp/latest/Audit-Logging#enable-disable-for-controllers-actions
  8. アプリケーションサービスクラスまたはクラスメソッドに [DisableAuditing] 属性を追加して監査ログを無効にするには、参考:https://docs.abp.io/en/abp/latest/Audit-Logging#enable-disable-for-application-services-methods
  9. 他のサービスの監査ログを有効 / 無効にするには、[Audited][DisableAuditing] 属性を追加するだけです。参考:https://docs.abp.io/en/abp/latest/Audit-Logging#enable-disable-for-other-services
  10. 特定のエンティティとエンティティ属性の監査ログを有効 / 無効にするには、参考:https://docs.abp.io/en/abp/latest/Audit-Logging#enable-disable-for-entities-properties
  11. 監査ログ保存の実装をカスタマイズするには、参考:https://docs.abp.io/en/abp/latest/Audit-Logging#iauditingstore
  12. 監査ログ記録の属性値を変更するには、IAuditingManager インターフェースを注入して変更します。参考:https://docs.abp.io/en/abp/latest/Audit-Logging#iauditlogscope-iauditingmanager
  13. バックグラウンドワーカーでログを記録したい場合、[Audited] マークを追加する必要はありません。なぜなら、定期的なタスクは asp.net core パイプラインを通過しないため、Audit Log Scope が作成されないからです。この属性は無効になります。解決策は手動で AuditLogScope を作成することです。手動で作成する場合、デフォルトでは AuditLog の記録のみが追加され、AuditLogAction の記録は追加されません。自分で手動で追加する必要があります。参考:https://docs.abp.io/en/abp/latest/Audit-Logging#manually-create-an-audit-log-scope

MiaoXinWebModule.cs で AbpAuditingOptions を設定します:

    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        ...
        ConfigureAuditing();
    }

    private void ConfigureAuditing()
    {
        // 設定の説明:https://docs.abp.io/en/abp/latest/Audit-Logging#abpauditingoptions
        //Configure<AbpAuditingOptions>(options =>
        //{
        //    // HTTP Get リクエストのログ記録、デフォルトは false。通常、Get リクエストはデータベースに変更を加えるべきではないため、監査ログを記録する必要はありません。
        //    //options.IsEnabledForGetRequests = true;

        //    // すべてのエンティティの変更記録を保存するには、大量のデータベーススペースが必要です。したがって、監査ログシステムはデフォルトでこの機能を無効にしています。明示的に設定しない限り。
        //    // すべてのエンティティのすべての変更を保存するには、AddAllEntities() 拡張メソッドを使用するだけです。
        //    // また、Add 関数を呼び出してラムダ式を記述し、フィルタ条件を定義することもできます。参考:https://docs.abp.io/en/abp/latest/Audit-Logging#entity-history-selectors
        //    //options.EntityHistorySelectors.AddAllEntities();
        //});

        // 特定のパスの監査ログ記録を無視する必要がある場合は、参考:https://docs.abp.io/en/abp/latest/Audit-Logging#abpaspnetcoreauditingoptions
    }

バックグラウンドワーカーのコード参考:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Auditing;
using Volo.Abp.BackgroundWorkers;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Threading;
using Volo.Abp.Uow;

namespace ?.BackgroundWorkers
{
    /// <summary>
    /// ユーザーの有効期限を設定します
    /// 
    /// https://docs.abp.io/zh-Hans/abp/latest/Background-Workers#asyncperiodicbackgroundworkerbase
    /// 
    /// AsyncPeriodicBackgroundWorkerBase は DoWorkAsync メソッドによってスローされた例外をキャッチして記録します。
    /// </summary>
    public class CustomerStatusCheckBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
    {
        public CustomerStatusCheckBackgroundWorker(
            AbpAsyncTimer timer,
            IServiceScopeFactory serviceScopeFactory
            )
            : base(timer, serviceScopeFactory)
        {
            // 毎時実行
            //Timer.Period = 1 * 60 * 60 * 1000;
            Timer.Period = 5 * 1000; // 5 秒ごとにテスト実行
        }

        // https://docs.abp.io/en/abp/latest/Unit-Of-Work#unitofworkattribute
        // https://support.abp.io/QA/Questions/1753/SystemObjectDisposedException-Cannot-access-a-disposed-context-instance
        [UnitOfWork]
        protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
        {
            // 依存関係を解決するには PeriodicBackgroundWorkerContext を使用する方が良いです。コンストラクタではなく。
            // AsyncPeriodicBackgroundWorkerBase はタスクの実行が終了する際に IServiceScope を破棄します。
            //Logger.LogDebug("Starting: CustomerStatusCheckBackgroundWorker");

            // 監査ログスコープを手動で作成します:https://docs.abp.io/en/abp/latest/Audit-Logging#manually-create-an-audit-log-scope
            var auditingManager = workerContext.ServiceProvider.GetRequiredService<IAuditingManager>();
            using (var auditingScope = auditingManager.BeginScope())
            {
                auditingManager.Current.Log.Url = "BackgroundWorker-CustomerStatusCheck";
                try
                {
					// 何かを実行..

                    auditingManager.Current.Log.Comments.Add($"適切なコメントをいくつか追加");
                }
                catch (Exception ex)
                {
                    //例外を追加
                    auditingManager.Current.Log.Exceptions.Add(ex);
                    throw;
                }
                finally
                {
                    // 常にログを保存
                    await auditingScope.SaveAsync();
                }
            }

            //Logger.LogDebug("Completed: CustomerStatusCheckBackgroundWorker");
        }
    }
}

参考#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。