【问题标题】:Serilog Azure EventHub Sink output template jsonSerilog Azure EventHub Sink 输出模板 json
【发布时间】:2017-04-28 05:27:44
【问题描述】:

所以,我正在努力解决这个问题。 我有 Serilog 并使用 EventHub 记录错误。 花了一段时间才找到,但我需要将它序列化为 JSON,所以我使用了这个:

logger = new LoggerConfiguration().WriteTo.Sink(new AzureEventHubSink(eventHubClient, new JsonFormatter()))
                .CreateLogger();

太好了。现在,当我编写异常时:

logger.Error(ex, "An Error Occurred");

它写了但异常写在 1 个字段中(大长强)。

有没有办法告诉 SeriLog 将异常的每个属性写入自己的字段中(将其视为带有字段的 SQL 表)?

改变 outputTemplate 但仍然使用 JsonFormatter 怎么样,因为没有过载来接受输出模板?

我正在使用流分析进行一些查询,它使每个异常属性作为其自己的字段列而不是一个包含整个 JSON 字符串的字段变得更好(更好),我需要交叉连接另一个数据源。

谢谢。

【问题讨论】:

  • 你想要这些列在哪里?本质上,事件中心消息只是一个带有一些元数据的字节数组。由客户来正确解释它。
  • 我理解,但 SA 本质上是从 EH 获取数据,只是吐出其中找到的列/道具并显示它。因此,当我执行 SELECT * FROM - 它向我显示来自 SeriLog 的列,如时间戳、级别、消息模板等......但除此之外,我想将每个异常属性添加到旁边的列列表中,然后说“消息模板”或甚至至少将“ClassName”作为自己的合法列。您可以修改 outputTemplate 格式,但似乎无法通过 JSON 格式化程序重载来做到这一点。 SeriLog 只是将异常序列化到它自己的字段中——我不希望这样。想要每个字段

标签: json azure-eventhub serilog


【解决方案1】:

似乎唯一的方法是从 JsonFormatter 继承,然后重写 WriteException 方法并写入有问题的属性....

    WriteJsonProperty("ClassName", exception.GetType(), ref delim, output);
    WriteJsonProperty("Message", exception.Message, ref delim, output);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 2021-01-18
    • 2020-07-24
    • 2016-08-18
    • 2023-02-02
    相关资源
    最近更新 更多