我正在使用 Serilog 登录到两个“接收器”。
我想记录一个复杂类型 - FileInfo 对象。
在 Seq 中,我想要完整的对象,以及它的所有属性可供我使用。
但是,在 RollingTextFile 中,我只希望在文本文件中打印“ fileInfo.FullName ”,否则文本文件会很乱且难以阅读。
我的日志记录如下;
logger.Information("Processing File: {@fileInfo} - Attempt ({intAttemptCounter}/3).",fileInfo, intAttemptCounter)
Run Code Online (Sandbox Code Playgroud)
这在文件信息对象解构的情况下按预期工作,但如上所述,会产生混乱且不可读的文本文件。
我想我需要使用这里概述的自定义“格式提供程序”;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)
Run Code Online (Sandbox Code Playgroud)
这也会在 Seq 中产生更好的显示效果,因为消息将只包含简单的文件名。
(另外,只是一个说明 -withFileInfo记录器可以在循环的每次迭代中重复使用,因此序列化的成本fileInfo只需支付一次。)
| 归档时间: |
|
| 查看次数: |
1883 次 |
| 最近记录: |