当Serilog [NotLogged]属性应用于NetworkCredential对象时

时间:2015-02-21 21:48:13

标签: serilog

鉴于以下类,如何禁止Serilog记录Credentials属性?

public class SmtpConfigInfo
{
    public string SmtpHostName { get; set; }

    public int Port { get; set; }

    [NotLogged]
    public System.Net.ICredentialsByHost Credentials { get; set; }
}

理想情况下,我希望能够只压缩"密码"证书的财产。如果没有,我现在可以看到整个凭证被禁止了。但是,当我按照以下方式登录Serilog时,

seriLogger.Error("{@ConfigInfo}", MySmtpConfigInfo)

忽略[NotLogged]属性,我会看到凭据的所有属性,包括用户名和密码。我看到一个文档似乎表明,如果我的Credentials属性被分解为UserName和Password属性,那么将[NotLogged]应用于Password可能会起作用。这是我使用的唯一选择" Serilog.Extras.Attributed"? 非常感谢!

1 个答案:

答案 0 :(得分:2)

要启用NotLogged属性,您需要添加.Destructure.UsingAttributes() - 如果缺少此属性,将忽略该属性。

示例:

var log = new LoggerConfiguration()
    .Destructure.UsingAttributes()
    .CreateLogger();

或者,长形解决方案类似于:

var log = new LoggerConfiguration()
    .Destructure.ByTransforming<SmtpConfigInfo>(info => new {
        info.SmtpHostName,
        info.SmtpPort,
        Credentials = new { UserName = info.Credentials.UserName }
    })
    .CreateLogger();