我遇到了类似的问题,我需要在日志记录期间编辑/隐藏对象的某些字段。
为简洁起见,我们假设对象是
public class User
{
public string UserName { get; set; }
public string Password { get; set; }
public override string ToString()
{
return base.ToString();
}
}
现在我们使用对象解构运算符(@)使用 serilog 进行日志记录
User user = new User() { UserName = "u", Password = "p" };
_logger.LogWarning("value is {@val}", user);
为了隐藏 Password 属性,我们可以如下设置 serilog
Log.Logger = new LoggerConfiguration()
.WriteTo.Console(new Serilog.Formatting.Json.JsonFormatter())
.Destructure.ByTransforming<User>(_ => new { User = _.UserName })
.CreateLogger();
现在对于任何对象的日志记录,用户都不会在其中包含密码字段,或者您可以通过设置 Password = "######" 来编辑密码字段
附:理想情况下,我们不应该记录任何敏感信息,但有时我们需要记录整个对象,其中某些道具不希望被记录,以上是处理这种情况的集中方法,而不是审查代码中的每个提交来验证这个潜在的错误。