我将我们的log4net记录器替换为使用Serilog的结构化日志记录。我想使用Enum在代码中强制执行标记,但我在如何做到这一点上遇到了一些困难。
现在我的日志是这样的:
logger.ErrorFormat("Proxy Logic for the Item {Item} failed. Swallow exception", Item);
当ErrorFormat
signutare
void ErrorFormat(string format, params object[] args);
但我不知道如何将Item
替换为LogTags.TagA
之类的东西。当TagA是一个枚举时,这将为我的标记提供一种强制统一标准的方法。
所以它看起来像这样:
public enum LogTags
{
TagA,
...
}
public class Foo
{
public void DoError()
{
logger.ErrorFormat("Proxy Logic for the Item {@LogTags.TagA} failed. Swallow exception", Item);
}
}
实现这一目标的最佳实践是什么?
发布于 2018-05-30 08:25:03
Serilog中的属性名称需要是简单的、非点分隔的标识符,所以像Enum.LogTags.Item
这样的名称不能直接工作。
如果一个简单的名称不够用,您可以使用类似于下面的模式来强制执行此嵌套:
logger.ErrorFormat(
"Proxy Logic for the Item {@Enum} failed. Swallow exception",
new { LogTags = new { Item }});
https://stackoverflow.com/questions/50579320
复制相似问题