如何只审计 [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>();
}
我的审计日志已经失控,所以我决定只审计所有基本上不是 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>();
}