让Sidekiq与papertrail合作

时间:2014-04-10 09:08:51

标签: ruby-on-rails ruby-on-rails-3.2 sidekiq paper-trail-gem

我尝试将我的rails(3.2.17)app的所有日志记录移动到生产中并暂存到papertrail。现在我尝试在config/initializers/sidekiq.rb中设置sidekiq的记录器,如下所示:

Sidekiq.configure_server do |config|
  Sidekiq::Logging.logger = RemoteSyslogLogger.new('logs.papertrailapp.com', ENV.fetch('PAPERTRAIL_PORT'), program: "sidekiq-#{Rails.env}")
end

当我尝试启动sidekiq时:

bundle exec sidekiq --index 0 --pidfile <PATH_TO_PID> --environment staging --daemon

我得到了

You really should set a logfile if you're going to daemonize
...bundle/ruby/2.0.0/gems/sidekiq-2.17.4/lib/sidekiq/cli.rb:141:in `daemonize'
...bundle/ruby/2.0.0/gems/sidekiq-2.17.4/lib/sidekiq/cli.rb:39:in `parse'
...bundle/ruby/2.0.0/gems/sidekiq-2.17.4/bin/sidekiq:7:in `<top (required)>'
...bundle/ruby/2.0.0/bin/sidekiq:23:in `load'
...bundle/ruby/2.0.0/bin/sidekiq:23:in `<main>'

但是,如果我首先给sidekiq一个假人进行记录:

bundle exec sidekiq --index 0 --pidfile <PATH_TO_PID> --environment staging --daemon --logfile /dev/null

它就像一个魅力(日志被发送到papertrail),因为初始化器似乎覆盖了以前的选项。

但我发现这种做法非常难看。有人对此采取了更清洁的方法吗?

1 个答案:

答案 0 :(得分:0)

我和sidekiq的老板讨论过这个问题,他提出了一个很好的观点:从启动过程到初始化程序运行的时间,很多事情都会出错。如果记录器仅在初始化程序中初始化,那么以前发生的所有内容都不会出现在任何日志中。

我可能会选择sidekiq所有者推荐的appoach:

bundle exec sidekiq | logger -t sidekiq