【问题标题】:Log hangfire events using existing serilog使用现有的 serilog 记录挂起事件
【发布时间】:2016-09-20 08:27:15
【问题描述】:

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

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

我的hangfire 完美运行,但我如何启用让hangfire 使用我的serilog?

【问题讨论】:

  • 根据documentation,Hangfire 自动支持登录到 Serilog。这不适合你吗?
  • 不,可悲的是,它不是。我发现文档真的很缺乏。
  • 与您的问题无关,但在应用程序退出时缺少Log.CloseAndFlush() 调用会导致问题(除非您的代码示例中简单地省略了它)。干杯!

标签: hangfire serilog


【解决方案1】:

Hangfire 可能正在初始化和缓存自己的内部记录器CreateLog() 被应用程序调用。

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

【讨论】:

    【解决方案2】:

    在 Hangfire 1.6.19 中(可能在此之前,我没有检查)将 NuGet 包添加到您的项目中会为您提供IGlobalConfiguration 上的扩展方法:

    configuration.UseSerilogLogProvider();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多