You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Serilog的WriteTo.Console时如何输出MessageTemplate属性?

解决方案

可以直接在Serilog Console的outputTemplate中配置输出MessageTemplate属性,Serilog输出模板原生支持引用该内置结构化属性,无需改用全量JSON格式化输出。

修改后配置示例

你只需要在原有输出模板中添加{MessageTemplate:j}占位符即可,:j格式限定符会自动对模板内容做JSON转义,避免特殊字符导致格式错误:

.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} MessageTemplate={MessageTemplate:j} {Properties:j}{NewLine}{Exception}")

优化方案(可选)

如果你希望MessageTemplate和其他自定义属性合并为同一个合法JSON片段,方便Filebeat统一解析,可使用Serilog.Expressions包提供的ExpressionTemplate实现更灵活的结构化输出,无需手动处理JSON符号拼接:

  • 先安装NuGet包Serilog.Expressions
  • 修改Console输出配置:
.WriteTo.Console(
    outputTemplate: new ExpressionTemplate(
        "[{@t:HH:mm:ss} {@l:u3}] {@m:lj} { {MessageTemplate: @mt, ..@p} }\n{@x}")
    )

两种方案都保留了控制台输出的人工可读性,同时会输出完整的MessageTemplate属性,可直接在Kibana中基于消息模板做聚合统计。


内容的提问来源于stack exchange,提问作者Apogee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:06:02