Нужно ли инициализировать приложение Logger.Log в ASP. NET Core 3 - PullRequest
1 голос
/ 29 мая 2020

Я планирую использовать Serilog в моем приложении ASP. NET Core 3, и я хотел бы использовать встроенную инициализацию . Я собираюсь использовать только интерфейс ILogger<T> из моего приложения.

Есть ли какая-то особая причина для назначения нового экземпляра регистратора свойству Log.Logger, если я не собираюсь напрямую использовать ведение журнала методы внутри класса Log?

Я нашел следующий образец на странице Serilog для ASP. NET Core page:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
    .Enrich.FromLogContext()
    .WriteTo.Console()
    .CreateLogger();

I поймите, что для регистрации ошибок запуска приложения мне нужно создать новый экземпляр регистратора, но не мог бы я просто использовать его как:

using Serilog;

public class Program
{
    public static int Main(string[] args)
    {
        using var startupLogger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .Enrich.FromLogContext()
            .WriteTo.Console()
            .CreateLogger();

        try
        {
            startupLogger.Information("Starting web host");
            CreateHostBuilder(args).Build().Run();
            return 0;
        }
        catch (Exception ex)
        {
            startupLogger.Fatal(ex, "Host terminated unexpectedly");
            return 1;
        }
    }
}

1 Ответ

0 голосов
/ 29 мая 2020

Установив

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
    .Enrich.FromLogContext()
    .WriteTo.Console()
    .CreateLogger();

и

    public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
                .UseSerilog(); // <-- Add this line;
                }

Вы настраиваете свой регистратор «глобально», и он доступен во всем приложении без необходимости внедрения.

В любом другом классе проекта или проектов, ссылающихся на него, вы можете войти, используя:

Log.Error("");

, используя настройки регистратора, которые вы установили при запуске.

Отвечая на ваш вопрос, если он можно ввести регистратор Serilog, ответ отрицательный. Вы не можете получить доступ к Serilog через DI в Net Core. Это статистика c. Вы могли бы, вероятно, взломать его, если хотите, что я бы не рекомендовал. Вы можете найти несколько примеров здесь .

...