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

Serilog控制台未输出渲染后消息仅显示日志模板值如何解决?

Serilog日志仅输出模板不显示渲染值解决方法
  • 调整Sink输出配置,你当前的配置未指定消息渲染规则,所以无法输出替换后的实际值。参考修改后的配置:
Log.Logger = new LoggerConfiguration()
                .Enrich.FromLogContext()
                .Enrich.WithElkEnrich(httpContextAccessor)
                // Elasticsearch Sink增加RenderMessage配置开启消息渲染
                .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(elasticsearchSinkOptions.Uri)
                {
                    // 保留你原有elasticsearchSinkOptions的其他配置
                    AutoRegisterTemplate = true,
                    IndexFormat = elasticsearchSinkOptions.IndexFormat,
                    // 新增以下配置,开启渲染完整消息
                    RenderMessage = true,
                    RenderMessageTemplate = true
                })
                // 控制台输出增加outputTemplate配置,指定输出渲染后的消息
                .WriteTo.Console(
                    restrictedToMinimumLevel: MinimumLogEventLevel(logOptions.ElkOptions.MinimumConsoleLevel),
                    outputTemplate: "[{Timestamp:yyyy-MM-dd HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}"
                )
                .CreateLogger();
  • 检查日志写入语法,必须使用Serilog原生消息模板语法传参,不要提前用C#字符串插值拼接内容,正确示例如下:
// 正确写法:模板和参数分开传入,Serilog会自动完成值替换渲染
var userId = 2024;
var apiPath = "/api/order/list";
Log.Information("用户{UserId}访问接口{ApiPath}", userId, apiPath);

// 错误写法:提前用$插值拼接,会丢失模板解析能力
// Log.Information($"用户{userId}访问接口{apiPath}");
  • 配置完成后,控制台会直接输出替换后的完整日志内容,Elasticsearch中会新增RenderedMessage字段存储渲染后的完整日志,原MessageTemplate字段仍会保留原始模板用于日志聚合统计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 23:45:04