我的审计日志正在失控,所以我决定只对所有请求进行审计,这些请求基本上不是Get请求。有什么简单的方法可以从配置中做到这一点吗?
这里的文档:https://aspnetboilerplate.com/Pages/Documents/Audit-Logging
说:
注意:除了标准的审计配置之外,MVC和ASP.NET核心模块还定义了用于启用/禁用操作审计日志记录的配置。
但我找不到更多关于这意味着什么的信息。
作为最后一种手段,我知道如果我在每个类中都添加了[DisableAuditing],然后在非Get端点上添加了[Audited],这是可行的,但这似乎有点混乱。
最佳独白:我只想有一种简单的方法来选择非GET请求并对它们进行审计。
第二种最佳解决方案:我只希望只对[Audited]方法进行审计。我不想在每堂课上写[DisabledAuditing]。
发布于 2020-11-16 19:03:24
您可以为此创建一个AuditStore,然后在服务YourAplicationNameCoreModule中替换原始的AuditStore。
下面是一个例子
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不同,然后保存
将下一段代码添加到YourApplicationNameCoreModule on PreInitialize方法中
public override void PreInitialize()
{
Configuration.ReplaceService<IAuditingStore, YourAuditStore>();
}https://stackoverflow.com/questions/64853292
复制相似问题