如何替换这段代码:
string name = "John";
logger.Information("length of name '{name}' is {nameLength}", name, name.Length);
使用类似这样的C# 字符串插值或类似语法
string name = "John";
// :-( lost benefit of structured logging: property names not passed to logger
logger.Information($"length of name '{name}' is {name.Length}");
但保留属性名称以使结构化日志正常工作?
好处包括:
- 提高可读性
- 您永远不会在参数列表中忘记参数或在消息模板中忘记属性名称,特别是在更改日志记录代码时
- 您始终知道此属性名称将打印到日志中
FromSql
同样的问题 - 很容易运行未参数化的查询,从而导致SQL注入。这就是为什么EF Core 3.1将其替换为FromSqlRaw
、FromSqlInterpolated
并向旧方法添加了Obsolete
属性的原因。 - Panagiotis Kanavos