У меня возникают проблемы с настройкой политики деструктуры Serilog, работающей только для определенного c приемника.
Сценарий
У меня есть два приемника: 1. Консоль 2. Файл
При регистрации в DataTable мне нужно, чтобы этот объект был сериализован в красивой печатной таблице для (1) приемника консоли, но не для (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] Test
┌────────────┬───────────────┐
│ TextColumn │ NumericColumn │
├────────────┼───────────────┤
│ Item0 │ 0 │
│ Item1 │ 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();
Как заставить эту конфигурацию работать?
Обратите внимание, что этот сценарий был упрощен для моих нужд.