首页 > 解决方案 > serilog拦截日志和修改日志

问题描述

我想截取serilog即将写入的日志并根据一些逻辑对其进行修改,即在日志中查找一些敏感信息并将其屏蔽。

到目前为止,我最接近的是找到 ILogEventEnricher

public class LogEnricher : ILogEventEnricher
{
    public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
    {
       //do something here, but what?
    }
}

但是 LogEvent 的属性 MessagTemplate 是只读的。任何想法如何在记录之前拦截日志并修改它们。

标签: loggingserilog

解决方案


使用 Serilog 处理该问题的常用方法是告诉 Serilog 在解构对象时不要记录某些属性。

例如,通过Destructurama.Attributed

public class LoginCommand
{
    public string Username { get; set; }

    [NotLogged]
    public string Password { get; set; }
}

您可以在这篇博文中阅读更多内容:使用属性控制 Serilog 中的解构


你也可以通过做类似的事情Destructurama.ByIgnoring

Log.Logger = new LoggerConfiguration()
    .Destructure.ByIgnoringProperties<User>(u => u.Password)
    // Other logger configuration
    .CreateLogger()

推荐阅读