如何对枚举强制执行Serilog标记

时间:2018-05-29 08:05:52

标签: c# enums serilog

我正在使用Serilog将我们的log4net记录器替换为结构化日志记录。 我想使用Enum在代码中强制执行标记,但是我在如何操作方面遇到了一些困难。

现在我的日志看起来像这样:

logger.ErrorFormat("Proxy Logic for the Item {Item} failed. Swallow exception", Item); 

ErrorFormat签名是

void ErrorFormat(string format, params object[] args);

但我不知道如何将Item替换为LogTags.TagA之类的内容。当TagA是一个Enum时,它将为我提供为我的标记强制执行统一标准的方法。

所以它看起来像:

public enum LogTags
{
TagA,
...
}
public class Foo
{
     public void DoError()
     {
     logger.ErrorFormat("Proxy Logic for the Item {@LogTags.TagA} failed. Swallow exception", Item);
     }
}     

实现此类目标的最佳做法是什么?

1 个答案:

答案 0 :(得分:3)

Serilog中的属性名称必须是简单的非点缀标识符,因此像Enum.LogTags.Item这样的名称不会直接起作用。

如果简单名称不合适,您可以使用下面的模式强制嵌套:

logger.ErrorFormat(
  "Proxy Logic for the Item {@Enum} failed. Swallow exception",
  new { LogTags = new { Item }});