【问题标题】:Sidekiq logs show JobWrapper instead of Job class nameSidekiq 日志显示 JobWrapper 而不是 Job 类名称
【发布时间】:2017-02-27 15:06:36
【问题描述】:

我有一个 Rails 应用程序,它通过 ActiveJobSidekiq 运行一些后台作业。终端和日志文件中的 sidekiq 日志显示如下:

2016-10-18T06:17:01.911Z 3252 TID-oukzs4q3k ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper JID-97318b38b1391672d21feb93 INFO: start

是否有某种方法可以在此处显示作业的类名,类似于常规 Sidekiq Worker 的日志工作方式?

更新:

这是 Sidekiq 工作人员的日志记录方式:

2016-10-18T11:05:39.690Z 13678 TID-or4o9w2o4 ClientJob JID-b3c71c9c63fe0c6d29fd2f21 INFO: start

更新 2:

我的sidekiq版本是3.4.2

我想将ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper 替换为Client Job

【问题讨论】:

    标签: ruby-on-rails ruby redis sidekiq rails-activejob


    【解决方案1】:

    所以我设法通过从中间件配置中删除 Sidekiq::Middleware::Server::Logging 并添加一个在日志中显示参数的修改类来做到这一点。参数本身也包含作业和操作名称。

    最新版本,目前4.2.3,在sidekiq.rb

    require 'sidekiq'
    require 'sidekiq/middleware/server/logging'
    
    class ParamsLogging < Sidekiq::Middleware::Server::Logging
      def log_context(worker, item)
        klass = item['wrapped'.freeze] || worker.class.to_s
        "#{klass} (#{item['args'].try(:join, ' ')}) JID-#{item['jid'.freeze]}"
      end
    end
    
    Sidekiq.configure_server do |config|
      config.server_middleware do |chain|
        chain.remove Sidekiq::Middleware::Server::Logging
        chain.add ParamsLogging
      end
    end
    

    对于版本 3.4.2 或类似版本,请改写 call 方法:

    class ParamsLogging < Sidekiq::Middleware::Server::Logging
      def call(worker, item, queue)
        klass = item['wrapped'.freeze] || worker.class.to_s
        Sidekiq::Logging.with_context("#{klass} (#{item['args'].try(:join, ' ')}) JID-#{item['jid'.freeze]}") do
          begin
            start = Time.now
            logger.info { "start" }
            yield
            logger.info { "done: #{elapsed(start)} sec" }
          rescue Exception
            logger.info { "fail: #{elapsed(start)} sec" }
            raise
          end
        end
      end
    end
    

    【讨论】:

    • 我暂时不接受这个答案,因为我希望看到更好的方法。
    【解决方案2】:

    你一定是在运行一些古老的版本。升级。

    抱歉,这似乎只是 Rails 5+ 的功能。您需要升级 Rails。 https://github.com/rails/rails/commit/8d2b1406bc201d8705e931b6f043441930f2e8ac

    【讨论】:

    • 我升级到最新版本,结果还是一样。类名仍然计算为ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper。无论如何,有没有办法在保留旧版本(3.4.2)的同时显示作业名称?
    猜你喜欢
    • 1970-01-01
    • 2018-07-21
    • 2018-10-21
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多