我有一个基于Rails 3.2的应用程序,它使用Sidekiq 2.12来运行后台作业。 Sidekiq作业可以调用与交互式Rails应用程序相同的方法。我希望这些方法在从Sidekiq调用时登录到Sidekiq日志,并在从Rails调用时登录到Rails日志。我正在寻找一种干净的方法来做到这一点,但到目前为止已经空了。
在这两种环境中,Sidekiq::Logging.logger
和Rails.logger
都已定义并正常工作。
我认为正确的做法是让Sidekiq在启动过程中用其记录器替换Rails记录器,然后始终登录到Rails记录器,但我找不到在Rails记录器之后运行的初始化器挂钩已设置但在Sidekiq作业启动之前,仅由Sidekiq运行。
有这样的钩子吗?如果是这样,请告诉我。如果没有,请提供其他建议,了解如何根据Sidekiq vs Rails运行环境干净地重定向日志输出。
答案 0 :(得分:27)
Sidekiq和Rails都使用Ruby StdLib中的Logger
兼容类。
您应该能够重新配置Rails记录器以在Sidekiq服务器配置块中使用Sidekiq记录器。查找/创建类似config/inititializers/sidekiq.rb
的文件:
Sidekiq.configure_server do |config|
Rails.logger = Sidekiq::Logging.logger
# Sidekiq other server config
...
end
传递给Sidekiq.configure_server调用的块仅在Sidekiq后端的Server组件中执行,而不是在Rails应用服务器或控制台中运行的客户端内执行。