NLog Replace Layout Renderer 不适用于 json 内容

Posted

技术标签:

【中文标题】NLog Replace Layout Renderer 不适用于 json 内容【英文标题】:NLog Replace Layout Renderer not work with json content 【发布时间】:2021-04-07 14:16:54 【问题描述】:

我使用第三方包,依赖于Nlog 4.7和NLog.AspNetCore 4.8,包会写日志。

在我的 Nlog.config 中

<logger name="package namespace" level="Info" writeTo="packageFile" />
<target xsi:type="File" name="packageFile" fileName="$baseFilePath/packageFile.log" KeepFileOpen="true" layout="$message" concurrentWrites="true" />

它的工作,但现在我需要替换消息中的内容。我找到了我需要的Replace Layout Renderer。

消息是这样的json字符串:

"ABC":"DEF":"AA00014325","GHI":"01" 

我想把消息替换成

"ABC":"DEF":"A****14325","GHI":"01" 

这是我使用的模式:[A-Z]\d1\d2 我用它来测试它:https://regex101.com/

更新: 我也尝试.NET Regex Tester的模式

我的 Nlog.config 是这样的:

<variable name ="messageReplace" value="$replace:inner=$message:searchFor=[A-Z]\\d1\\\d2\:replaceWith=****:regex=true" />
<logger name="package namespace" level="Info" writeTo="packageFile" />
<target xsi:type="File" name="packageFile" fileName="$baseFilePath/packageFile.log" KeepFileOpen="true" layout="$messageReplace" concurrentWrites="true" />  

但这不行……

我像这样更改我的 Nlog.config:

<variable name ="message1" value="AA00014325" />
<variable name ="messageReplace" value="$replace:inner=$message1:searchFor=[A-Z]\\d1\\\d2\:replaceWith=****:regex=true" />
<logger name="package namespace" level="Info" writeTo="packageFile" />
<target xsi:type="File" name="packageFile" fileName="$baseFilePath/packageFile.log" KeepFileOpen="true" layout="$messageReplace" concurrentWrites="true" /> 

它正在工作...但是如果将 message1 更改为

"AA00014325"

它不再工作了....为什么?

我想替换消息中的json字符串,怎么办?

信息:

平台:ASP.NET Core 3 Nlog 版本:4.7 NLog.AspNetCore 版本:4.8

谢谢!

【问题讨论】:

我这边的正则表达式似乎不匹配,仔细检查regexstorm.net/tester @DaneBalia 我在 .NET Regex Tester 上尝试正则表达式 [A-Z]\d1\d2 是可以的 【参考方案1】:

所以使用这个配置,我让它按照屏幕截图工作。 需要记住的是,配置是 XML 所以到escape correctly。但我看你是对的✔。所以我相信这取决于你的正则表达式。

 <variable name="messageNoDigits" value="$replace:inner=$message:searchFor=[A-Z]\\d\3\:replaceWith=****:regex=true" />

【讨论】:

以上是关于NLog Replace Layout Renderer 不适用于 json 内容的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 NLog 覆盖日志文件

NLog rolling file

如何使用 NLog 记录到多个目标?

包装 NLog 时如何保留调用点信息

NLog:使用空格格式化日志级别

使用 InstallNlogConfig 将 Nlog Config 安装到 Eventlog 中