使用现有的serilog记录hangfire事件

问题描述 投票:4回答:2

我是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?

hangfire serilog
2个回答
2
投票

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

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


0
投票

在Hangfire 1.6.19中(也许在此之前,我没有检查)将NuGet包添加到您的项目中为IGlobalConfiguration提供了一个扩展方法:

configuration.UseSerilogLogProvider();

© www.soinside.com 2019 - 2024. All rights reserved.