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 内容的主要内容,如果未能解决你的问题,请参考以下文章