【发布时间】:2021-06-10 23:49:36
【问题描述】:
是否希望 Serilog 丰富器(尤其是 LogEvent)知道推送到 LogContext 上的属性?
我有一个属性被推送到 Serilog 上下文中:
using (LogContext.PushProperty(LoggingConstants.MyProperty, _myValue))
{
// ...
}
我还注册了一个自定义浓缩器,如果它不存在,它会添加一个属性,并将其填充到指定的长度:
public class PaddedPropertyEnricher : ILogEventEnricher
{
private readonly string _propertyName;
private readonly int _maxLength;
public PaddedPropertyEnricher(string propertyName, int maxLength)
{
_propertyName = propertyName;
_maxLength = maxLength;
}
public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
{
var property = propertyFactory.CreateProperty(_propertyName, new string(' ', _maxLength));
logEvent.AddPropertyIfAbsent(property);
}
}
和:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.With(new PaddedPropertyEnricher(LoggingConstants.MyProperty, 3))
// etc.
此扩充器的目的是使不包含自定义属性的日志条目不会导致日志条目中的列不对齐。
例如,它打算转换这个:
2021-06-10 12:23:33.676 +12:00 [INF] [] First message without MyProperty
2021-06-10 12:23:33.677 +12:00 [DBG] [123] Second message with MyProperty
进入这个:
2021-06-10 12:23:33.676 +12:00 [INF] [ ] First message without MyProperty
2021-06-10 12:23:33.677 +12:00 [DBG] [123] Second message with MyProperty
但是,这个浓缩器不起作用。当针对我推送到上下文的属性注册丰富器时,从LogEvent 检索到的值始终为null - 除非MyProperty 明确显示在日志消息本身中。
这是一个已知的限制,还是我滥用了浓缩器?
这可能与Always log context data using serilog遇到的问题有关。
【问题讨论】:
-
Log.Logger = ...直到最后一个serilog链init CreateLogger的完整代码是什么?
-
感谢您提示我查看此内容 - 我忘记了使用
LogContext本身需要丰富器!