gpt4 book ai didi

logging - Serilog - 如何为文件接收器自定义解构类对象的输出格式

转载 作者:行者123 更新时间:2023-12-02 18:39:07 25 4
gpt4 key购买 nike

我正在使用 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 接收器。我也找不到任何其他示例实现。

最佳答案

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

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

这也会导致 Seq 中的显示效果更好,因为消息将仅包含简单的文件名。

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

关于logging - Serilog - 如何为文件接收器自定义解构类对象的输出格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40336834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com