【发布时间】: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]\d{1}\d{2} 我用它来测试它:https://regex101.com/
更新: 我也尝试.NET Regex Tester的模式
我的 Nlog.config 是这样的:
<variable name ="messageReplace" value="${replace:inner=${message}:searchFor=[A-Z]\\d{1\}\\d{2\}: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]\\d{1\}\\d{2\}: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]\d{1}\d{2} 是可以的