c# - 如何防止 ${aspnet-request-posted-body} 不记录敏感信息

标签 c# logging nlog

我正在使用 ${aspnet-request-post-body} 将请求正文记录在日志文件中。我面临的问题:我想阻止 ${aspnet-request-post-body} 记录一些信息,例如密码和信用卡详细信息,我喜欢对它们应用屏蔽。

例如,如果请求正文是 {用户名:ABC,密码:554&3} 这应该以这种格式记录 {用户名:ABC,密码:****}

请注意,我已经针对此问题尝试过替换布局,但不想使用它。还有其他方法可以完成这项任务吗?

最佳答案

${aspnet-request-post-body} 只是 NLog 的文本。

所以你有以下选择:

  • 替换所有内容(使用正则表达式):配置示例替换所有:

    <variable name="messageNoDigits" 
      value="${replace:inner=${message}:searchFor=(\\d{3\})+:replaceWith=:regex=true}" />
    
  • 编写您自己的自定义布局渲染器,将正文解析为 JSON 并对其进行转换。请注意,在 ASP.NET Core 中读取主体可能有点棘手,请参阅 the current code in NLog for it .如果您有读取/转换正文的代码,它可以很容易地转换为 NLog 布局渲染器:

    using NLog.Web.LayoutRenderers; 
    
    // register ${SanitizedBody}
    AspNetLayoutRendererBase.Register("SanitizedBody", (logEventInfo, httpContext, loggingConfiguration) => MyMethod(httpContext));
    

    参见 https://github.com/NLog/NLog/wiki/How-to-write-a-custom-layout-renderer

关于c# - 如何防止 ${aspnet-request-posted-body} 不记录敏感信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64470868/

相关文章:

python - 将日志记录配置包含在 configparser 读取的文件中

nlog - 使用自定义目标将所有 NLog 输出重定向到 Serilog

c# - MySql 更新查询在 asp.net 中不起作用

c# - 系统.InvalidOperationException : Missing parameter

c# - Crystal Reports 根据心情加载

java - 将桌面java应用程序的日志发送到服务器

c# - Visual Studio Razor 页面错误语法错误

swift - Xcode 8 (Swift) 控制台中没有打印输出

c# - NLog 异步目标时间戳

.net - Common.Logging 有什么替代品吗?