从 Hangfire 1.3.0 开始,如果您的应用程序已经通过反射使用了以下库之一(因此 Hangfire 本身不依赖于其中任何一个),则无需执行任何操作。通过按如下所示的顺序检查相应类型的存在来自动选择日志记录实现。
Serilog
NLog
Log4Net
EntLib
记录
Loupe
Elmah
我有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 仪表板会显示异常,但它会格式化异常, 请参阅此处隐藏有关异常的关键信息。我认为如果它记录异常,Serilog 记录器会记录完整的异常。