logging - serilog拦截日志和修改日志
问题描述
我想截取serilog即将写入的日志并根据一些逻辑对其进行修改,即在日志中查找一些敏感信息并将其屏蔽。
到目前为止,我最接近的是找到 ILogEventEnricher
public class LogEnricher : ILogEventEnricher
{
public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
{
//do something here, but what?
}
}
但是 LogEvent 的属性 MessagTemplate 是只读的。任何想法如何在记录之前拦截日志并修改它们。
解决方案
使用 Serilog 处理该问题的常用方法是告诉 Serilog 在解构对象时不要记录某些属性。
例如,通过Destructurama.Attributed
:
public class LoginCommand
{
public string Username { get; set; }
[NotLogged]
public string Password { get; set; }
}
您可以在这篇博文中阅读更多内容:使用属性控制 Serilog 中的解构。
你也可以通过做类似的事情Destructurama.ByIgnoring
Log.Logger = new LoggerConfiguration()
.Destructure.ByIgnoringProperties<User>(u => u.Password)
// Other logger configuration
.CreateLogger()
推荐阅读
- javascript - 使用onclick在循环中按ID删除元素 - jquery
- python - 如何在没有足够 RAM 的情况下使用 Pandas 打开巨大的镶木地板文件
- python - Django- [WinError 10013]
- c# - 在第一个下拉列表中选择该项目时,如何从第二个下拉列表中删除该项目?
- android - java中的布局setVisibility()没有效果
- android - 我尝试运行示例 Arcore 应用程序,但示例增强图像应用程序在我尝试运行时崩溃
- python - python中eval函数的问题
- linux - 原子指令是否涉及内核
- javascript - 如何在本机反应中访问与该键关联的键和值
- r - 由 dplyr 总结和加入的 for 循环