Hangfire 没有登录到 NLog

Posted

技术标签:

【中文标题】Hangfire 没有登录到 NLog【英文标题】:Hangfire not logging to NLog 【发布时间】:2020-08-03 12:20:19 【问题描述】:

我在这里创建了一个独立的问题复制品:https://github.com/GuerrillaCoder/HangfireLoggingTest

使用的版本:

  <ItemGroup>
    <PackageReference Include="Hangfire.AspNetCore" Version="1.7.12" />
    <PackageReference Include="Hangfire.Console" Version="1.4.2" />
    <PackageReference Include="Hangfire.Core" Version="1.7.12" />
    <PackageReference Include="Hangfire.MemoryStorage.Core" Version="1.4.0" />
    <PackageReference Include="NLog.Web.AspNetCore" Version="4.9.3" />
  </ItemGroup>

问题:

Hangfire 从不向日志写入任何内容,这使得调试任务停滞或失败的问题变得非常困难。

我相信我已正确遵循说明并将 LogLevel 设置为 Trace,但除了直接向 Nlog 记录器发送消息外,没有任何内容写入日志。

重现步骤

    git 克隆https://github.com/GuerrillaCoder/HangfireLoggingTest 运行项目(观察日志是在 LogOutput 文件夹中创建的,并且写入的消息显示 NLog 正在运行) 导航到 /hangfire 并手动触发任务 观察hangfire根本没有写任何日志消息

【问题讨论】:

记得在项目中配置NLog.config,所以Copy to Output Directory等于Copy if newer。另见github.com/NLog/NLog/wiki/Logging-troubleshooting 已经设置好了。 Nlog 工作正常,hangfire 没有记录到它。 但是您的示例项目没有配置这个。想在 github 上更新它吗? 也许你可以尝试在你的program.cs中声明Nlog,像这样:github.com/NLog/NLog/wiki/… 【参考方案1】:

尝试像这样更新ConfigureServices

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)

    // Register NLog as LoggingProvider for Microsoft ILogger
    services.AddLogging(builder => 
       loggingBuilder.ClearProviders();
       loggingBuilder.AddNLog();
    );

    services.AddControllersWithViews();

    // Only needed for NetFramework with LibLog. NetCore uses Microsoft ILogger
    // GlobalConfiguration.Configuration.UseNLogLogProvider();

    services.AddHangfire((isp, config) =>
    
        config.UseMemoryStorage();
        config.UseConsole(); // https://www.nuget.org/packages/Hangfire.Console/
    );

另请参阅:https://docs.hangfire.io/en/latest/configuration/configuring-logging.html

【讨论】:

以上是关于Hangfire 没有登录到 NLog的主要内容,如果未能解决你的问题,请参考以下文章

Hangfire实战--添加DashBoard登录权限

在没有数据库存储的情况下使用 HangFire 进行后台作业处理?

Hangfire.io仪表板映射到IIS虚拟目录

使用 Hangfire 创建重复作业时出错

ABP官方文档翻译 7.2 Hangfire集成

Hangfire:该类型不包含带有签名的方法