Hangfire不会使用配置的Logger

时间:2018-05-08 18:13:21

标签: hangfire hangfire-unity hangfire-sql

根据hangfire documentation

  

从Hangfire 1.3.0开始,如果是,则无需执行任何操作   您的应用程序已经使用以下库之一   反思(以便Hangfire本身不依赖于任何一个   他们)。通过检查自动选择记录实现   按以下顺序存在相应的类型。

     

Serilog
  NLOG
  log4net的
  EntLib
  记录
  放大镜
  艾尔玛

我有使用Serilog的ASP.NET Core 2.0应用程序,如下所示

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .UseApplicationInsights()
        .UseUrls("http://*:40006")
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
           // removed for bravity
        })
        .ConfigureLogging((hostingContext, logging) =>
        {                
                Log.Logger = new LoggerConfiguration()
                .ReadFrom.Configuration(hostingContext.Configuration)
                .CreateLogger();

                logging.AddSerilog();

        })
        .Build();
}

应用程序配置为使用Hangfire。在后台作业处理期间,如果发生任何异常,Hangfire会按预期延迟重试作业10次,并在仪表板中显示异常。

问题
Hangfire仪表板在UI上显示异常,但它不会将异常记录到配置的Serilog接收器中。

注意:Hangfire信息中心会显示异常,但会格式化异常see here,该异常会隐藏有关异常的重要信息。 我想如果它记录异常,Serilog记录器会记录完整的异常。

1 个答案:

答案 0 :(得分:0)

在使用.NET Core 3.1的最新Hangfire版本中,我遇到了同样的问题。

解决方案是在UseSerilogLogProvider()中调用IGlobalConfiguration的{​​{1}}方法。

例如:

StartUp.cs

 GlobalConfiguration.Configuration.UseSerilogLogProvider();

通常不需要此调用,但是在某些情况下,自动接线无效(例如,将引用多个日志记录提供程序)。您可以在正式的Hangfire文档中阅读有关此内容的更多信息:Configure Logging