首页 > 解决方案 > 不要在序列化的 AuditEvents 中包含环境

问题描述

在 Audit.NET 输出的 Environment 属性中,没有一个属性(DomainName、MachineName 等)对我们真正有用,并且在我们的审计数据库中占用了大量额外空间。

要删除它们,我发现我可以这样做:

auditScope.Event.Environment = new AuditEventEnvironment()

...或者我可以在其上放置一个自定义 ContractResolver 以Audit.Core.Configuration.JsonSettings.ContractResolver跳过 Environment 属性。

但是有没有更好的方法来禁用 Environment 属性?

标签: audit.net

解决方案


在问题中提到的选项中,这是唯一一个从序列化审计条目中完全删除 Environment 的选项。另一个选项序列化为一个空的 Environment 对象(如果 Environment 设置为 null,那么您会得到 NullReferenceException)。

在 ConfigureServices 中将 ContractResolver 设置为 EnvironmentSkippingContractResolver:

Audit.Core.Configuration.JsonSettings.ContractResolver = EnvironmentSkippingContractResolver.Instance;

EnvironmentSkippingContractResolver 看起来像这样:

public class EnvironmentSkippingContractResolver : DefaultContractResolver
{
    public static readonly EnvironmentSkippingContractResolver Instance = new EnvironmentSkippingContractResolver();

    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        JsonProperty property = base.CreateProperty(member, memberSerialization);
        property.ShouldSerialize = instance => member.Name != "Environment";
        return property;
    }
}

推荐阅读