You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 2 API集成Hangfire遇NLog相关方法找不到错误

解决Hangfire集成时的Method not found: 'Hangfire.Logging.ILog Hangfire.Logging.LogProvider.GetCurrentClassLogger()'错误

这个错误几乎肯定是Hangfire的日志抽象层和你项目里的NLog集成出现了版本不兼容或配置缺失导致的。Hangfire内部依赖自己的Hangfire.Logging.ILog接口做日志输出,但如果没正确把NLog适配到这个接口,或者相关包版本不匹配,就会触发找不到方法的问题——仪表盘能正常工作是因为它的初始化流程没调用到这个日志方法,而添加后台任务时会触发Hangfire核心调度的日志逻辑,才暴露了问题。

下面是一步步的解决方案:

  • 统一Hangfire相关包的版本
    先检查你项目里所有Hangfire包(比如Hangfire.Core、Hangfire.MySqlStorage等)的版本,确保它们完全一致。不同版本的Hangfire组件可能会导致日志接口的定义不匹配,直接引发找不到方法的错误。你可以在NuGet包管理器里查看,或者直接编辑.csproj文件,把所有PackageReference中Hangfire开头的包版本改成同一个(选兼容.NET Core 2的最新稳定版即可)。

  • 安装Hangfire的NLog适配包
    你需要专门的适配器来让Hangfire复用你已有的NLog配置,安装Hangfire.NLog包:

    # NuGet包管理器控制台
    Install-Package Hangfire.NLog
    # 或者用.NET CLI
    dotnet add package Hangfire.NLog
    
  • 在Startup中配置Hangfire使用NLog日志提供器
    在你初始化Hangfire的代码段里,添加指定日志提供器的配置,确保在Hangfire初始化前NLog已经完成初始化:

    // 先初始化你原有的NLog配置
    var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
    
    // 配置Hangfire时指定NLog作为日志提供器
    services.AddHangfire(config =>
    {
        config.UseStorage(new MySqlStorage("你的MySQL连接字符串"));
        // 关键:添加这行绑定NLog
        config.UseNLogLogProvider();
    });
    
  • 清理缓存并重建项目
    有时候项目的bin/obj文件夹里会残留旧版本的dll,导致版本冲突。先右键项目选择「清理」,然后手动删除bin和obj文件夹,再重新构建项目。

  • 排查其他日志框架冲突
    如果以上步骤都没用,检查项目里是否同时安装了其他日志框架(比如Serilog、log4net),这些可能和Hangfire的日志抽象层产生冲突,暂时移除其他日志包测试,确认是否是冲突导致的问题。

内容的提问来源于stack exchange,提问作者Glenn Utter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:14:47