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

解析C#新语法:Try-Catch中LogError的参数匹配疑问

日志框架占位符语法解释

这段代码用的是日志框架(比如Serilog、NLog或.NET内置ILogger)的结构化日志占位符语法,和C#的$字符串插值不是一回事。

  • 第一个占位符{thisOneIsaParamOK}对应后面的参数thisOneIsaParamOK,这个用法没问题,日志框架会把参数值填充到占位符位置,同时保留参数名用于结构化查询。
  • 关于{exception}:这是日志框架的特殊内置占位符,专门用来接收Exception类型的对象,自动格式化输出完整异常信息(包括堆栈跟踪、内部异常等)。你现在代码里传的是ex.Message(字符串类型),框架没法把它识别为异常占位符的匹配参数,所以才会看起来“找不到对应变量”。

正确写法

应该直接传递异常对象ex,而不是它的Message属性:

Catch(Exception ex)
{
    logger.LogError("Unable to get {thisOneIsaParamOK}, from network: {exception}", thisOneIsaParamOK, ex);
}

转换成基础字符串拼接的版本(不推荐,丢失结构化日志优势)

如果要改成普通字符串拼接,得手动拼接完整异常信息(用ex.ToString()比ex.Message更实用,能保留更多排错信息):

Catch(Exception ex)
{
    string errorContent = "Unable to get " + thisOneIsaParamOK + ", from network: \n " + ex.ToString();
    logger.LogError(errorContent);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:52:02