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

Я новичок в 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 использовал мой серилог?


person Jonas Olesen    schedule 20.09.2016    source источник
comment
Согласно документации, Hangfire автоматически поддерживает ведение журнала в Serilog. Это тебе не подходит?   -  person PatrickSteele    schedule 20.09.2016
comment
нет, к сожалению, это не так. и я считаю, что документации действительно не хватает.   -  person Jonas Olesen    schedule 20.09.2016
comment
Не имеет отношения к вашей проблеме, но отсутствие вызова Log.CloseAndFlush() при выходе из приложения вызовет проблемы (если он просто не пропущен в вашем примере кода). Ваше здоровье!   -  person Nicholas Blumhardt    schedule 21.09.2016


Ответы (2)


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

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

person Nicholas Blumhardt    schedule 20.09.2016

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

configuration.UseSerilogLogProvider();

person Richard    schedule 26.03.2019