如何为Microsoft ILogger的LogDebug消息添加额外元数据?
问题描述
- 使用
Microsoft.Extensions.Logging.ILogger接口,现有日志代码如下:
_logger.LogDebug("Finished: DB retrieved OutboundData settings.", new { ElapsedTime = stopwatch.Elapsed });
- 日志字符串未包含变量为有意设计
- 当前日志已附带4项额外键值元数据,希望通过上述单一日志方法新增第5项元数据(
ElapsedTime及其对应值) - 最终日志库为Serilog,但仅在宿主项目中使用,禁止使用Serilog特定方法
答案
完全可行。
Microsoft.Extensions.Logging(MEL)的日志方法(如LogDebug)原生支持传递结构化数据参数:当你传入匿名类型对象时,MEL会自动解析对象的属性为键值对元数据,并与已有的上下文元数据合并。
具体逻辑:
- 你传入的
new { ElapsedTime = stopwatch.Elapsed }会被MEL底层处理,将ElapsedTime作为元数据键,stopwatch.Elapsed的实际值作为对应值,添加到日志的属性集合中 - 这些元数据会被后续的日志提供者(包括Serilog)接收并处理,最终和原有4项元数据一起以键值对形式输出
只需确保MEL的基础配置未禁用结构化属性传递(默认是开启状态)即可,无需额外操作。
内容的提问来源于stack exchange,提问作者Pure.Krome
相关产品推荐
相关产品推荐

