gpt4 book ai didi

c# - 消息模板应为编译时间常数

转载 作者:行者123 更新时间:2023-12-03 09:40:20 26 4
gpt4 key购买 nike

我有这个代码

[HttpGet("average/{videoGuid}")]
public async Task<IActionResult> AverageRatingOfVideo([FromRoute] string videoGuid)
{
_logger.LogInformation($"Finding average rating of video : {videoGuid}");
var avg = await _ratingService.GetVideoRatingAverageAsync(videoGuid);
return Ok(avg);
}
我在这里得到警告 $"Finding average rating of video : {videoGuid}"

Message template should be compile time constant


我正在使用 骑士,没有建议解决此警告。
我不明白为什么这会给我警告,我该如何解决?

最佳答案

消除警告的方法是单独提供变量videoGuid,如下所示:

_logger.LogInformation("Finding average rating of video : {VideoGuid}", videoGuid);
在这里,我首先删除了$符号,从而关闭了C#执行的字符串插值。现在,字符串中的 {videoGuid}变成了“属性”,因此我将变量作为第二个参数传递给LogInformation。 Rider还提示字符串中的属性应以大写字母开头,因此我将其更改为 {VideoGuid}
现在是一个真正的问题:为什么会有警告?
答案是字符串插值会阻止结构化日志记录。在消息后传递变量时,记录程序可以单独保存它们。如果仅将日志保存到文件中,则可能不会有什么区别,但是如果您以后决定登录到数据库或采用某种JSON格式,则只需更改日志接收器,就可以在日志中进行大量搜索更容易,而无需更改代码中的所有日志语句。
Stack Exchange上对此进行了很好的讨论。

关于c# - 消息模板应为编译时间常数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65874828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com