我很难获得仅针对特定接收器的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();
如何使此配置起作用?请注意,此场景已根据我的需要进行了简化。