如何只审计 [Audited] 方法而不到处都是 [DisabledAudited]?

How to only audit [Audited] methods without having [DisabledAudited] everywhere?

我的审计日志已经失控,所以我决定只审计所有基本上不是 Get 请求的请求。有没有一种非常简单的方法可以从配置中做到这一点?

这里的文档: https://aspnetboilerplate.com/Pages/Documents/Audit-Logging

说:

Note: In addition to the standard audit configuration, MVC and ASP.NET Core modules define configurations to enable/disable audit logging for actions.

但是我找不到更多关于这到底是什么意思的信息。

作为最后的手段,我知道如果我去每个 class 并添加 [DisableAuditing] 然后在非 Get 端点上添加 [Audited] 会起作用,但这似乎是有点乱。

最佳解决方案:我只想有一个简单的方法来 select 仅非 GET 请求并审核它们。

第二个最佳解决方案: 我只想审核 [Audited] 方法。我不想在每个 class.

上写 [DisabledAuditing]

您可以创建一个 AuditStore 来执行此操作,然后替换服务中的原始 AuditStore YourAplicationNameCoreModule

示例如下

public class YourAuditStore : AuditingStore
{

    public ILogger<AuditingStore> Logger { get; set; }

    private readonly IRepository<AuditLog, long> _auditLogRepository;
    private readonly ISettingManager _settingManager;

    public YourAuditStore(IRepository<AuditLog, long> auditLogRepository, ISettingManager settingManager) : base(auditLogRepository)
    {
        _auditLogRepository = auditLogRepository;
        _settingManager = settingManager;
    }

    public override async Task SaveAsync(AuditInfo auditInfo)
    {
        AuditLog auditLog = new AuditLog();

        bool logErrorsOnly = await _settingManager.GetSettingValueAsync<bool>(AppSettings.Logging.LogOnErrorsOnly);

        var exceptionMessage = auditInfo.Exception != null ? auditInfo.Exception.ToString() : null;

        if ((logErrorsOnly && exceptionMessage != null) || !logErrorsOnly)
        {

            auditLog = await _auditLogRepository.InsertAsync(AuditLog.CreateFromAuditInfo(auditInfo));
        }


    }

}

如您所见,您可以在 SaveAsync 方法中过滤您想要的任何内容,因为它收到 AuditInfo,您可以检查方法是否与 Get 不同,然后保存

将下一个代码添加到 PreInitialize 方法上的 YourApplicationNameCoreModule

public override void PreInitialize()
{
   Configuration.ReplaceService<IAuditingStore, YourAuditStore>();
}