Azure Application Insights查看Serilog日志:参数为何嵌入事件字符串?
问题分析与解决
你的操作存在偏差,这个现象并非Serilog与Azure Application Insights的正常协作逻辑,而是代码写法不符合预期导致的。
核心原因
Serilog中的{Time}是结构化日志的属性占位符,默认行为是:
- 将参数值(这里是动态生成的时间字符串)填充到日志消息中,最终生成类似
job is running 14:23:45的动态消息内容 - 同时将
Time作为独立的属性字段存储在日志元数据里
Azure Application Insights会将每条消息内容不同的日志判定为不同的事件类型,因此图表会用不同颜色区分这些日志。
实现你预期的两种方案
如果你希望日志消息固定为job is running {Time},同时保留时间作为独立属性,可以这样修改代码:
// 用双大括号转义,让消息里保留{Time}字面量,通过ForContext传递时间属性 _logger.ForContext("Time", DateTime.Now.ToString("HH:mm:ss")) .LogInformation("job is running {{Time}}");
如果你只是希望Azure AI将这些日志归为同一事件(图表用同一种颜色),但仍然在消息中显示具体时间,无需修改代码,只需在Azure AI的图表配置中,将分组维度从Message(最终消息内容)切换为MessageTemplate(Serilog的原始消息模板)即可——这样所有使用同一模板的日志会被归为一类,图表颜色统一。
内容的提问来源于stack exchange,提问作者MaxP
相关产品推荐
相关产品推荐

