Правильное внедрение Serilog в классы ядра. net как Microsoft.Extentions.Logging.ILogger - Не ASP. Net Core - PullRequest
0 голосов
/ 10 января 2020

Итак, у меня есть. Net приложение Core Console и несколько. Net базовых библиотек.

Большинство классов в библиотеках имеют такие конструкторы.

public class ReportingManager
{
   private ILogger _logger;
   Public ReportingManager(ILogger logger)
   {
      _logger = logger;
   }
}

с ILogger, имеющим тип Microsoft.Extentions.Logging.ILogger

В моем консольном приложении у меня есть это.

class Program
{
    static void Main(string[] args)
    {           
            var serilog = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .MinimumLevel.Override("Microsoft", Serilog.Events.LogEventLevel.Warning)
                .Enrich.FromLogContext()
                .WriteTo.Console(theme: AnsiConsoleTheme.Code)
                .CreateLogger();

            ReportingManager manager = new ReportingManager(serilog);

    }
}

У меня есть ошибка в intellisense в 'ManageringManager = новый ReportingManager (serilog) ; '

не может конвертировать из' Serilog.Core.Logger 'в' Microsoft.Extensions.Logging.ILogger '

Итак, мой вопрос, как мне передать Serilog правильно?

Посмотрели онлайн и здесь, но большинство говорят о ASP. Net Core.

1 Ответ

0 голосов
/ 10 января 2020

Вам нужно обернуть регистратор Serilog в Microsoft.Extensions.Logging.LoggerFactory. Это именно то, что происходит, когда то же самое используется в DI в ASP. NET.

Примерно так:

Serilog.Core.Logger serilog = ...;

var loggerFactory = new LoggerFactory()
    .AddSerilog(serilog);

Microsoft.Extensions.Logging.ILogger logger = loggerFactory.CreateLogger("Logger");

Для этого требуется Serilog.Extensions.Logging пакет NuGet.

...