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

如何向Serilog封装方法传递MessageTemplate字符串以保留模板特性

实现方案

你只需在封装层新增支持消息模板与可变参数的方法重载,直接透传参数给Serilog原生API即可,修改后代码如下:

// 新增支持模板参数的重载
public static void Warning(string messageTemplate, params object[] propertyValues)
{
    Serilog.Log.Warning(messageTemplate, propertyValues);
}

// 原有单字符串参数的重载可按需保留,互不影响
public static void Warning(string log)
{
    Serilog.Log.Warning(log);
}
  • 该重载的调用形式和原生Serilog完全一致,你示例中的调用方式可以直接复用,不需要做任何调整
  • 透传参数的方式不会破坏Serilog的MessageTemplate核心特性:占位符解析、结构化属性持久化、自定义格式(比如示例中的{1:C}货币格式化)都可以正常生效
注意事项

禁止提前用C# $ 插值语法将模板与参数拼接为完整字符串后传入,该写法会导致Serilog无法提取结构化属性,完全丢失MessageTemplate特性,属于错误用法:

// 错误示例
Warning($"Checked out order {order.Id} for ${order.Total:C}");

正确用法保持模板与参数分开传入即可,和原生Serilog使用习惯一致:

// 正确示例
Warning("Checked out order {0} for ${1:C}", order.Id, order.Total);

其他日志级别(Information、Error、Debug等)的封装可以套用完全相同的逻辑实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:06:07