У меня есть ситуация, когда некоторые события журнала содержат большие значения свойств (в данном конкретном случае - большой пакет XML). Я хочу использовать функциональность Serialog ByIncludingOnly
, чтобы использовать дополнительный приемник для этих больших событий данных. Вот пример того, что я думал, что будет работать:Фильтрация событий через ByIncludingOnly
private static void FilteredLogging()
{
Log.Logger = new LoggerConfiguration()
.WriteTo.Console(new RawFormatter())
.WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(LargeDataPackets))
.WriteTo.File("big.txt")
.CreateLogger();
Log.Information("go");
Log.ForContext("data", "12345").Information("Small packet");
Log.ForContext("data", "1234567890987654321").Information("Big packet");
Log.CloseAndFlush();
}
private static bool LargeDataPackets(LogEvent le)
{
return le.Properties.ContainsKey("data") &&
le.Properties["data"].ToString().Length > 10;
}
Однако, когда я запускаю этот код, все три сообщения отправляются в файл «big.txt». Я ожидал, что только последний элемент («Большой пакет») отправится в файл, так как это единственное событие с свойством data
, которое имеет более 10 символов.
Я использую Serilog 2.0.
Doh! На человека - это смущает! Спасибо Николаю! – PatrickSteele