Net Core 3.0 и Serilog выдают результаты, такие как Microsoft.Extensions.Logging - PullRequest
1 голос
/ 25 октября 2019

У меня есть простое веб-приложение, использующее .Net Core 3.0.

В моем компоновщике хоста я делаю это:

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
                .UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                    .ReadFrom.Configuration(hostingContext.Configuration)
                    .Enrich.FromLogContext()
                    .WriteTo.Console());

Затем я пытаюсь реализовать его в другом проекте (простая dllиспользующий netcoreapp3.0), на который ссылается проект веб-приложения:

using using Microsoft.Extensions.Logging;
...
private readonly ILogger<MyClass> _logger;

public MyClass(ILogger<MyClass> logger){
  _logger = logger;
  ...
  Log.Logger.Information("this is a test {test}", command.GetType().Name);

  _logger.LogInformation("Command received: {CommandType}", command.GetType().Name);
}
...

Статический регистратор работает нормально, но вывод _logger выглядит так, как будто я использую ведение журнала по умолчанию. Но насколько я понимаю из чтения этого , компоновщик хоста теперь заменил ILoggerFactory и должен выводить вывод в стиле Serilog.

These are my two outputs, first from the static and then from _logger

Как сделать так, чтобы выход _logger был таким же аккуратным, как и выход Serilog?

1 Ответ

0 голосов
/ 28 октября 2019

Проблема, с которой я столкнулся, заключалась в том, что всякий раз, когда я улавливал событие очереди, журнал использовал журналирование в стиле Microsoft.Extensions.Logging.

Это происходит потому, что прослушиватель событий каким-то образом был зарегистрирован ДО ПЕРЕД фабрикой журналирования. был заменен, но выполнен ПОСЛЕ, что привело к странной регистрации. Мое решение делало это:

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                    .ReadFrom.Configuration(hostingContext.Configuration)
                    .Enrich.FromLogContext()
                    .WriteTo.Console());
                    webBuilder.UseStartup<Startup>();
                });
...