C#Serilog:如何使用字符串插值记录日志并将参数名称保留在消息模板中?

em

如何替换此代码:

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}");

但是保留用于结构化日志记录的属性名称吗?

好处是:

  1. 可读性更高
  2. 您将永远不会忘记参数列表中的参数或消息模板中的属性名称,尤其是当您更改日志记录代码时
  3. 您始终知道此属性名称将打印到您的日志中
em

将此文件添加到您的项目。它具有ILogger扩展方法VerboseInterpolated()DebugInterpolated()等等。这里也有单元测试

格式字符串的用法

string name = "John";
// add 'Interpolated' to method name: InformationInterpolated() instead of Information()
// add name of the property after the expression. Name is passed to the logger
logger.InformationInterpolated($"length of name '{name:name}' is {name.Length:Length}");

但是要小心:使用错误的方法太容易了。例如logger.Debug($"length = {length:propertyNameForLogger}")如果您不小心使用了Serilog的方法,它将记录log length = propertyNameForLogger,因此不会记录任何参数值这是由于propertyNameForLogger格式为你的价值。

匿名类型的用法

string name = "John";
// add 'Interpolated' to method name: InformationInterpolated() instead of Information()
// create an anonymous object with 'new { propertyName }'. 
// It's much slower because of using Reflection, but allows to write the variable name only once. 
logger.InformationInterpolated($"length of name '{new { name }}' is {new { name.Length }}");
// you can also specify other property names
logger.InformationInterpolated($"length of name '{new { userName = name }}' is {new { lengthOfName = name.Length }}");

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sed字符串并将值保留在新变量中

来自分类Dev

分割字符串并将分隔符字符串保留在C#中

来自分类Dev

使用字符串作为参数名称

来自分类Dev

如何在 pug 模板的图像标签中使用字符串插值 - src attr?

来自分类Dev

从列中减去字符串并将原始索引保留在Pandas中

来自分类Dev

如何使用字符串作为动态参数名称

来自分类Dev

如何删除名称并仅将tld保留在域名字符串PHP和Regex中

来自分类Dev

如何使用字符串插值

来自分类Dev

如何使用字符串插值打印$

来自分类Dev

删除文件名的字符串,并将其他字符串保留在BASH中

来自分类Dev

如何使用R将所有转义字符保留在SQL字符串中以查询POSTGRES DB?

来自分类Dev

将查询字符串保留在Laravel中

来自分类Dev

如何仅将数字和某些特殊字符保留在字符串中?

来自分类Dev

如何仅将数字和某些特殊字符保留在字符串中?

来自分类Dev

将具有特定字符串值的行数据保留在R中

来自分类Dev

在Elixir中,如何使用字符串插值格式化数字

来自分类Dev

如何仅将信息保留在R中的复杂字符串中?

来自分类Dev

如何颠倒字符串中的单词,但将标点符号保留在正确的位置?

来自分类Dev

如何仅将字符串保留在数据框列中

来自分类Dev

如何仅将数字保留在数据框的列的字符串中?

来自分类Dev

使用单词拆分字符串,但将单词保留在每个数组索引中

来自分类Dev

在bash上使用sed将特定字符串保留在一行中?

来自分类Dev

删除字符串,使用JavaScript将数字保留在数组中

来自分类Dev

使用单词拆分字符串,但将单词保留在每个数组索引中

来自分类Dev

如何避免System.ArgumentOutOfRangeException:索引和长度必须引用字符串中的位置。参数名称:长度

来自分类Dev

如何解析索引和长度必须引用字符串中的位置。参数名称:“长度”?

来自分类Dev

C#索引和长度必须引用字符串中的位置。参数名称:长度

来自分类Dev

索引和计数必须引用字符串中的位置。参数名称:count

来自分类Dev

索引和长度必须引用字符串中的位置。参数名称长度

Related 相关文章

  1. 1

    sed字符串并将值保留在新变量中

  2. 2

    分割字符串并将分隔符字符串保留在C#中

  3. 3

    使用字符串作为参数名称

  4. 4

    如何在 pug 模板的图像标签中使用字符串插值 - src attr?

  5. 5

    从列中减去字符串并将原始索引保留在Pandas中

  6. 6

    如何使用字符串作为动态参数名称

  7. 7

    如何删除名称并仅将tld保留在域名字符串PHP和Regex中

  8. 8

    如何使用字符串插值

  9. 9

    如何使用字符串插值打印$

  10. 10

    删除文件名的字符串,并将其他字符串保留在BASH中

  11. 11

    如何使用R将所有转义字符保留在SQL字符串中以查询POSTGRES DB?

  12. 12

    将查询字符串保留在Laravel中

  13. 13

    如何仅将数字和某些特殊字符保留在字符串中?

  14. 14

    如何仅将数字和某些特殊字符保留在字符串中?

  15. 15

    将具有特定字符串值的行数据保留在R中

  16. 16

    在Elixir中,如何使用字符串插值格式化数字

  17. 17

    如何仅将信息保留在R中的复杂字符串中?

  18. 18

    如何颠倒字符串中的单词,但将标点符号保留在正确的位置?

  19. 19

    如何仅将字符串保留在数据框列中

  20. 20

    如何仅将数字保留在数据框的列的字符串中?

  21. 21

    使用单词拆分字符串,但将单词保留在每个数组索引中

  22. 22

    在bash上使用sed将特定字符串保留在一行中?

  23. 23

    删除字符串,使用JavaScript将数字保留在数组中

  24. 24

    使用单词拆分字符串,但将单词保留在每个数组索引中

  25. 25

    如何避免System.ArgumentOutOfRangeException:索引和长度必须引用字符串中的位置。参数名称:长度

  26. 26

    如何解析索引和长度必须引用字符串中的位置。参数名称:“长度”?

  27. 27

    C#索引和长度必须引用字符串中的位置。参数名称:长度

  28. 28

    索引和计数必须引用字符串中的位置。参数名称:count

  29. 29

    索引和长度必须引用字符串中的位置。参数名称长度

热门标签

归档