【发布时间】:2019-03-12 04:25:58
【问题描述】:
我想截取serilog即将写入的日志,并根据一些逻辑对其进行修改,即在日志中查找一些敏感信息并将其屏蔽。
到目前为止,我最接近的是找到 ILogEventEnricher
public class LogEnricher : ILogEventEnricher
{
public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
{
//do something here, but what?
}
}
但是LogEvent 的MessagTemplate 属性是只读的。 任何想法如何在记录之前拦截日志并修改它们。
【问题讨论】:
-
制作一个接收器,将 WriteTo.Sink 添加到配置中,并使用 ILogEvent 属性突变函数在那里进行突变(但是当为时已晚时,请不要陷入修复东西的兔子洞 - 这种突变需要发生在源头)
-
已经使用 serilog.console.sinks 并在文件系统和控制台上写入,我不想添加自定义接收器,但只想修改正在写入文件和控制台的内容。
-
公平点(我认为你是对的,浓缩者在变异方面具有相同的设施(我重复一遍,你应该设法避免!)) - 有阅读 serilog/serilog 的来源 - 很有可能无法触及模板,但
logEvent应该允许您 arr/remove/change 属性,不是吗? -
github.com/nblumhardt/serilog-sinks-timewarp/blob/master/… 与您所追求的类似(查看
Main()方法以查看所有内容)-尽管现在时间紧迫,但现在将其写成答案, 对不起。 HTH!