使用NLog进行结构化日志记录时如何添加额外属性?
以下是NLog框架下几种更优雅的额外属性添加方式,按需选择即可:
方式1:链式调用WithProperty(单条日志加属性首选)
NLog原生支持链式调用WithProperty方法直接附加属性,无需手动构造LogEventInfo对象,写法简洁直观,还可以连续追加多个属性:
' 单个额外属性 _Logger.WithProperty("EventId", eventId).Info("This is my message: {MessageId}", messageId) ' 多个额外属性直接链式追加即可 _Logger.WithProperty("EventId", eventId) _ .WithProperty("Operator", "admin") _ .Info("This is my message: {MessageId}", messageId)
方式2:使用日志作用域BeginScope(批量加属性首选)
如果同一段代码逻辑内的多条日志都需要附加相同的额外属性,可以用作用域的方式统一添加,作用域内所有日志都会自动带上这些属性,无需逐条设置:
Using _Logger.BeginScope(New With { Key .EventId = eventId, Key .TraceId = traceId, Key .RequestPath = "/api/order/create" }) ' 作用域内的所有日志都会自动带上上面3个属性 _Logger.Info("收到请求,消息ID:{MessageId}", messageId) _Logger.Debug("请求参数:{Param}", param) _Logger.Info("请求处理完成,耗时:{Cost}ms", costMs) End Using
方式3:Logger实例固定属性
如果某类属性需要附加到当前Logger实例的所有日志中,可以直接给Logger实例设置固定属性,后续所有通过该实例打印的日志都会自动携带:
_Logger.SetProperty("ServiceName", "OrderService") ' 后续所有该实例打印的日志都会自动带上ServiceName属性 _Logger.Info("This is my message: {MessageId}", messageId)
内容的提问来源于stack exchange,提问作者user3010344
相关产品推荐
相关产品推荐

