使用现有的serilog记录hangfire事件

时间:2016-09-20 08:27:15

标签: hangfire serilog

我是hangfire的新手,我试图在asp.net web api中使用我现有的serilog记录器设置记录事件的方法。这是我的记录器类:

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();

我的篝火效果很好,但是如何让make hangfire使用我的serilog?

2 个答案:

答案 0 :(得分:2)

在应用程序调用 CreateLog()之前,Hangfire可能正在初始化并缓存自己的内部记录器

要测试此理论,请尝试将初始化Log.Logger的代码移动到应用启动代码的最开头,例如:在Global.Application_Start()或类似。

答案 1 :(得分:0)

在Hangfire 1.6.19中(也许在那之前,我没有检查过)将NuGet软件包添加到您的项目中可以为您提供IGlobalConfiguration上的扩展方法:

configuration.UseSerilogLogProvider();