【问题标题】:Serilog - How to Custom Format the Output of a Destructured Class Object for File SinkSerilog - 如何自定义格式化文件接收器的解构类对象的输出
【发布时间】:2016-10-31 05:04:36
【问题描述】:

我正在使用 Serilog 登录到两个“接收器”。

  1. 滚动文本文件
  2. 序列

我想记录一个复杂类型 - FileInfo 对象。

在 Seq 中,我想要完整的对象及其所有属性。

然而,在 RollingTextFile 中,我只希望 'fileInfo.FullName' 打印在文本文件中,否则文本文件会很乱且难以阅读。

我的日志记录如下;

logger.Information("Processing File: {@fileInfo}  - Attempt ({intAttemptCounter}/3).",fileInfo, intAttemptCounter)

这与解构的 fileInfo 对象按预期工作,但如上所述,会产生一个混乱且不可读的文本文件。

我认为我需要使用此处概述的自定义“格式提供程序”; https://github.com/serilog/serilog/wiki/Formatting-Output#format-providers

但我不知道如何为 fileInfo 类对象实现此功能并将其仅应用于 RollingTextFile 接收器。我也找不到任何其他示例实现。

【问题讨论】:

    标签: logging serilog


    【解决方案1】:

    除了条件格式,您可以只在消息中包含名称(将显示在滚动文件中)并将完整信息附加为属性(仅在 Seq 中显示)。

    var withFileInfo = logger.ForContext("File", fileInfo, destructureObjects true);
    withFileInfo.Information("Processing File: {FileName} - Attempt ({intAttemptCounter}/3).",
        fileInfo.FullName, intAttemptCounter)
    

    这也将导致在 Seq 中更好地显示,因为消息将只包含简单的文件名。

    (另外,请注意 - withFileInfo 记录器可以在循环的每次迭代中重复使用,因此序列化 fileInfo 的成本只需支付一次。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      相关资源
      最近更新 更多