2016-01-26 7 views
2

Я новичок в Serilog, и я борюсь с отображением имени класса только тогда, когда это необходимо, без необходимости добавлять {SourceContext:l} к каждому сообщению журнала. Я знаю, что я могу просто написать код, как:Возможно ли показывать только SourceContext в Serilog, если ForContext <class> был определен

Log.ForContext<Class1>().Verbose("message {SourceContext:l}"); 

У меня есть регистратор будучи установки, как показано ниже:

var log = new LoggerConfiguration() 
       .MinimumLevel.Verbose() 
       .WriteTo 
       .ColoredConsole(outputTemplate: "{Timestamp:G} [{Level}] {SourceContext} {Message}{NewLine:l}{Exception:l}") 
       .CreateLogger(); 

Я надеюсь только имя класса, отображаемый, когда был указан класс как видно здесь.

Log.ForContext<Class1>().Verbose("message"); 

И не отображается, если журнал создан как.

Log.Verbose("message"); 

Однако на примере выше он будет печатать журнал в формате «{} SourceContext сообщения» вместо просто «сообщения», которое не то, что я хочу.

ответ

1

Это может быть ошибка в ColoredConsoleSink - обычно при рендеринге выходных токенов недостающее значение остается пустым.

Воспитанный: https://github.com/serilog/serilog/issues/649

Вы можете попытаться переключиться на грамотные консоли тонуть (https://github.com/serilog/serilog-sinks-literate), который я не верю, что есть эта ошибка.