解析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
相关产品推荐
相关产品推荐

