特定于接收器的Serilog重组策略

问题描述 投票:0回答:1

我很难获得仅针对特定接收器的Serilog销毁策略。

场景

我有两个水槽:1.控制台2.文件

记录数据表时,我需要将该对象在漂亮的打印表中序列化为(1)控制台接收器,而not对于(2)文件接收器。

例如,

var table = new DataTable("MyDataSet");
table.Columns.Add("TextColumn");
table.Columns.Add("NumericColumn", typeof(int));
table.Rows.Add("Item0", 0);
table.Rows.Add("Item1", 1);

logger.Information("Test {@Data}", table);

预期输出应为

[[10:23:22 INF]测试──────────┬│TextColumn│NumericColumn│├──────────┼│项0│0││项1│1│────────────┴──────────┘

问题

我有一个使用自定义IDestructuringPolicy(名称为ConsoleTablePolicy)来执行格式化的解决方案,[[但是它适用于所有接收器-不仅适用于控制台接收器。

当前配置

工程,但适用于所有接收器-文件接收器也获得漂亮的打印表。这不是我所需要的。

var logger = new LoggerConfiguration() .MinimumLevel.Verbose() .WriteTo.Console() .WriteTo.File(@"C:\TEMP\log.txt") .Destructure.With(new ConsoleTablePolicy()) .CreateLogger();

预期配置

将控制台接收器和自定义分解策略添加到子记录器时,永远不会调用该分解策略。

var logger = new LoggerConfiguration() .MinimumLevel.Verbose() .WriteTo.Logger(c => c.WriteTo.Console().Destructure.With(new ConsoleTablePolicy())) .WriteTo.File(@"C:\TEMP\log.txt") .CreateLogger();

如何使此配置起作用?

请注意,此场景已根据我的需要进行了简化。

logging serilog
1个回答
0
投票
在将其提交到接收器之前,对写线程进行解构。
© www.soinside.com 2019 - 2024. All rights reserved.