Hangfire不会使用配置的记录器记录异常

问题描述 投票:3回答:1

根据hangfire documentation

[从Hangfire 1.3.0开始,如果 您的应用程序已通过以下方式使用以下库之一 反思(这样,Hangfire本身就不依赖于任何 他们)。通过检查是否自动选择日志记录实现 相应类型的存在顺序如下所示。

Serilog 日志 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记录器将记录完整的异常。

hangfire hangfire-unity hangfire-sql
1个回答
0
投票

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

解决方案是在UseSerilogLogProvider()中调用IGlobalConfigurationStartUp.cs方法。

例如:

 GlobalConfiguration.Configuration.UseSerilogLogProvider();

services.AddHangfire(configuration => configuration
 .UseSimpleAssemblyNameTypeSerializer()
 .UseRecommendedSerializerSettings()
 .UseSerilogLogProvider());

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

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