You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Audit.NET:是否有仅输出变更值的配置选项?

Audit.NET 仅记录变更值的配置方法

当然有办法实现仅输出变更值,Audit.NET提供了内置配置项和扩展机制来处理这种场景,以下是两种常用的实现方案:

1. EF场景:启用内置差异记录

如果你的审计是针对Entity Framework实体,可以直接在Audit.EntityFramework的配置中开启IncludeDifferences选项,它会自动对比实体的新旧值,只保留有变更的字段:

Audit.Core.Configuration.Setup()
    .UseEntityFramework(options => options
        .AuditTypeMapper(type => typeof(AuditLog))
        .AuditEntityAction<AuditLog>((auditEvent, entityEntry, auditEntity) =>
        {
            // 这里可以添加审计日志的额外赋值逻辑
        })
        .IncludeDifferences()); // 关键配置:仅记录变更字段

开启后,审计日志中会自动生成Differences字段,仅包含值发生变化的属性及其新旧值,原有的完整新旧对象可以选择保留或移除(根据你的需求)。

2. 通用场景:自定义差异过滤

如果是普通对象的审计,或者需要更精细的对比控制,可以通过两种方式实现:

方式一:全局配置值比较器

通过全局设置ValueComparer,让Audit.NET自动判断哪些值需要记录:

Audit.Core.Configuration.Setup()
    .UseFileLogProvider() // 替换为你实际使用的日志提供器
    .SetValueComparer((oldVal, newVal) =>
    {
        // 自定义值相等判断逻辑,返回true则不记录该字段的变更
        if (oldVal == null && newVal == null)
            return true;
        return oldVal?.Equals(newVal) ?? false;
    });

方式二:手动过滤变更字段

在创建审计事件后,手动遍历属性并筛选出变更项,替换原有的完整新旧值:

using (var scope = Audit.Core.AuditScope.Create("OperationName", () => largeObject))
{
    var auditEvent = scope.Event;
    // 获取旧值和新值对象
    var oldObj = auditEvent.CustomFields["Old"];
    var newObj = auditEvent.CustomFields["New"];
    
    // 筛选出值不同的属性
    var changedFields = oldObj.GetType().GetProperties()
        .Where(prop => !Equals(prop.GetValue(oldObj), prop.GetValue(newObj)))
        .ToDictionary(prop => prop.Name, prop => new 
        { 
            OldValue = prop.GetValue(oldObj), 
            NewValue = prop.GetValue(newObj) 
        });
    
    // 替换原有字段为变更集合
    auditEvent.CustomFields.Remove("Old");
    auditEvent.CustomFields.Remove("New");
    auditEvent.CustomFields.Add("ChangedFields", changedFields);
}

大部分Audit.NET的扩展(比如针对MVC、WebApi的扩展)都可以结合上述方法实现仅记录变更值的需求,核心就是通过内置差异对比或自定义逻辑过滤未变更字段。

内容的提问来源于stack exchange,提问作者Rune

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:35:27