c# - 如何强制对枚举进行 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);
}
}
实现此类目标的最佳实践是什么?
解决方案
Serilog 中的属性名称需要是简单的、不带点的标识符,因此类似的名称Enum.LogTags.Item
不能直接使用。
如果一个简单的名称不合适,您可以使用类似下面的模式强制这种嵌套:
logger.ErrorFormat(
"Proxy Logic for the Item {@Enum} failed. Swallow exception",
new { LogTags = new { Item }});
推荐阅读
- react-native - 评级不选择超过 3 星 - React Native Elements - 评级)
- html - 关于如何使用纯 CSS 制作这个的任何想法?文本剪辑到背景图像
- django - 如何将文件从 Angular 7 上传到 Django - 得到错误 403(禁止)
- python - 比较列表中的多个列表
- javascript - 如何在站点和第三方 Javascript 小部件之间实施用户管理?
- php - 网上商店需要添加到购物车按钮对齐
- javascript - 在javascript中达到特定数字时如何从x++到x--间隔?
- python - 遍历 Python 中的字符串列表
- java - JInternalFrame - 非法组件位置
- python - 并发任务确定性地生成伪随机数