serilog拦截日志并修改日志

时间:2019-03-11 10:29:20

标签: logging serilog

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

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

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

,但LogEvent的MessagTemplate属性为只读。 任何想法,我如何截取日志并在记录之前对其进行修改。

1 个答案:

答案 0 :(得分:1)

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

例如,通过Destructurama.Attributed

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

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

您可以在以下博客文章中了解更多信息: Using attributes to control destructuring in Serilog


您也可以通过Destructurama.ByIgnoring

做类似的事情
Log.Logger = new LoggerConfiguration()
    .Destructure.ByIgnoringProperties<User>(u => u.Password)
    // Other logger configuration
    .CreateLogger()