首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NLog结构化日志记录屏蔽

NLog结构化日志记录屏蔽
EN

Stack Overflow用户
提问于 2020-04-21 03:19:27
回答 2查看 903关注 0票数 1

假设我们正在编写以下结构化日志消息

代码语言:javascript
复制
logger.Info("User's Password is {Password}", "1234567890");

我想屏蔽密码属性,因为它是敏感数据。我找到了this issue,但我认为这是一种非常困难的方式。

例如,我发现the extension可以为serilog解决类似的任务。它使用起来非常简单。但是我没有为Nlog找到任何有用的信息。

如何用nlog库实现?如果有任何建议,我将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2020-04-22 03:26:47

你可以使用RegisterObjectTransformationintroduced in NLog 4.7

例如:

代码语言:javascript
复制
LogManager.Setup().SetupSerialization(s => 
    s.RegisterObjectTransformation<object>(o =>
    {
        var props = o.GetType().GetProperties();
        var propsDict = props.ToDictionary(p => p.Name, p => p.GetValue(o));

        propsDict.Remove("password");

        return propsDict;
   }));

请注意,在性能方面,你可能需要像反射缓存和智能优化这样的东西。

票数 2
EN

Stack Overflow用户

发布于 2021-10-07 18:32:35

我建议您将秘密密码封装在一个对象中,如下所示:

代码语言:javascript
复制
public class SecretWrapper : IFormatable
{
    private readonly string _secret;

    public SecretWrapper(string secret)
    {
        _secret  = secret;
    }

    public string GetSecret() => _secret; // Not a property to avoid basic reflection

    public override string ToString() => "******"

    public string ToString (string format, IFormatProvider formatProvider) => ToString();
}

NLog永远不会输出secret-value:

代码语言:javascript
复制
logger.Info("User's Password is {Password}", new SecretWrapper("1234567890"));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61330333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档