我有一个Rails应用程序,通过 ActiveJob 和 Sidekiq 运行一些后台作业。 sidekiq登录终端和日志文件显示以下内容:
2016-10-18T06:17:01.911Z 3252 TID-oukzs4q3k ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper JID-97318b38b1391672d21feb93 INFO: start
有没有办法在这里显示作业的类名,类似于日志如何为常规的Sidekiq工作者工作?
更新
以下是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
答案 0 :(得分:0)
你必须运行一些古老的版本。升级。
抱歉,看起来只是Rails 5+功能。您需要升级Rails。 https://github.com/rails/rails/commit/8d2b1406bc201d8705e931b6f043441930f2e8ac
答案 1 :(得分:0)
所以我设法通过从中间件配置中删除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