如何通过JSON配置仅为特定Sink(File)应用Enricher
如何通过JSON配置仅为特定Sink(File)应用Enricher
这个需求在Serilog配置里很常见,你之前的思路方向是对的,但写法上有个关键细节没注意到——Serilog的JSON配置中,针对单个Sink的enricher需要用数组形式来声明,而不是单个字符串。
正确的配置方式
首先移除全局的"Enrich": "SuperCoolEnricher"配置(避免所有Sink都被该Enricher处理),然后在WriteTo:File的配置块里添加数组形式的Enrich属性:
{ "WriteTo:File": { "Name": "File", "Args": { // 这里填写你的File Sink参数,比如路径、格式等 }, "Enrich": [ "SuperCoolEnricher" ] }, "WriteTo:Seq": { "Name": "Seq", "Args": { // 这里填写你的Seq Sink参数 } } }
如果需要保留全局Enricher
如果你还有其他全局生效的Enricher,想让File Sink同时拥有全局Enricher和这个特定的SuperCoolEnricher,可以保留全局的Enrich配置,同时在File Sink里追加特定的Enricher:
{ "Enrich": [ "SomeGlobalEnricher" ], "WriteTo:File": { "Name": "File", "Args": { ... }, "Enrich": [ "SuperCoolEnricher" ] }, "WriteTo:Seq": { "Name": "Seq", "Args": { ... } } }
这种情况下,File Sink的日志事件会被SomeGlobalEnricher和SuperCoolEnricher共同处理,而Seq Sink只会应用全局的SomeGlobalEnricher。
为什么你之前的写法不生效
你之前直接写"Enrich": "SuperCoolEnricher"(单个字符串),Serilog的JSON配置解析器期望这里是一个数组(即使只有一个Enricher),所以无法识别这个配置,导致Enricher没有被应用到File Sink上。
备注:内容来源于stack exchange,提问作者sharpener
相关产品推荐
相关产品推荐

