2016-07-20 6 views
7

Я регистрирую события всех типов в одном Json-файле независимо от LogLevel. Теперь у меня есть требование записать некоторые пользовательские счетчики производительности в отдельный Json-файл. Как это можно сделать в Серилоге. Должен ли я создать другой экземпляр регистратора и использовать его, где бы я ни собирался регистрировать счетчики производительности? Хотите использовать это с LibLogSerilog: Log to different files

+0

Возможный дубликат [Serilog - несколько файлов журналов] (https://stackoverflow.com/questions/28292601/serilog-multiple-log-files) –

ответ

2

Вы можете сделать это, предварительно убедившись, что события счетчика производительности отмечены либо определенным значением свойства (OpenMappedContext() в LibLog), либо из определенного типа/пространства имен.

var log = LogProvider.For<MyApp.Performance.SomeCounter>() 
log.Info(...); 

При настройке Serilog, sub-logger с примененным фильтром можно отправить только необходимые события второго файла.

Log.Logger = new LoggerConfiguration() 
    .WriteTo.Logger(lc => lc 
     .Filter.ByExcluding(Matching.FromSource("MyApp.Performance")) 
     .WriteTo.File("first.json", new JsonFormatter())) 
    .WriteTo.Logger(lc => lc 
     .Filter.ByIncludingOnly(Matching.FromSource("MyApp.Performance")) 
     .WriteTo.File("second.json", new JsonFormatter())) 
    .CreateLogger(); 
+0

Прочитайте подправить: Serilog 2.0 приключения с суб-регистраторы , Не уверен. Если я что-то пропустил, но, если я это сделаю, журналы из «MyApp.Performance» также попадут в внешний журнал. Я не хочу, чтобы эти конкретные журналы записывались в основной файл журнала. – Shetty

+0

Добавление два суб-каротажных конвейера с обратными фильтрами должны это сделать. Обновление ответа .. –

+0

Это сработало для меня. Отредактированный ответ для удаления JsonFormatter. – Shetty