2016-10-20 7 views
2

У меня есть ситуация, когда некоторые события журнала содержат большие значения свойств (в данном конкретном случае - большой пакет 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.

ответ

2

Ваши Скобки немного не в:

Log.Logger = new LoggerConfiguration() 
     .WriteTo.Console(new RawFormatter()) 
     .WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(LargeDataPackets)) 
      .WriteTo.File("big.txt") 
     .CreateLogger(); 

Должно быть:

Log.Logger = new LoggerConfiguration() 
     .WriteTo.Console(new RawFormatter()) 
     .WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(LargeDataPackets) 
      .WriteTo.File("big.txt")) 
     .CreateLogger(); 
+0

Doh! На человека - это смущает! Спасибо Николаю! – PatrickSteele