Журнал событий Hangfire, используя существующий Serilog

Я новичок в Hangfire, и я пытаюсь настроить способ записи событий, используя мой существующий регистратор serilog в веб-API asp.net. Вот мой класс логгера:

public static class LoggerInitializer
{
    private static ILogger CreateLog()
    {
        var settings = Settings.Instance;
        Log.Logger = new LoggerConfiguration().
            MinimumLevel.Debug().
            WriteTo.RollingFile(settings.LoggerDebugDirectory +"Debug-{Date}.txt", restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Debug, 
                outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}").
            WriteTo.RollingFile(settings.LoggerVerboseDirectory + "Debug-{Date}.txt").
            CreateLogger();
        return Log.Logger;
    }
    static ILogger _logger;
    public static ILogger GetLogger()
    {
        if (_logger != null)
            return _logger;
        return _logger = CreateLog();
    }
}

и в моем файле запуска я добавляю код из документации по Hangfire:

GlobalConfiguration.Configuration
            .UseSqlServerStorage(Settings.Instance.NLSContextConnectionString);

        app.UseHangfireDashboard();
        app.UseHangfireServer();

Мой Hangfire работает отлично, но как мне сделать так, чтобы Hangfire использовал мой Serilog?

1 ответ

Возможно, что Hangfire инициализирует и кэширует свой собственный внутренний регистратор CreateLog() вызывается приложением.

Чтобы проверить эту теорию, попробуйте переместить код, который инициализирует Log.Logger в самом начале кода запуска приложения, например, в Global.Application_Start() или похожие.

В Hangfire 1.6.19 (а может и раньше я не проверял) добавление пакета NuGet в ваш проект дает вам метод расширения на IGlobalConfiguration:

configuration.UseSerilogLogProvider();

Другие вопросы по тегам