4

本番環境およびステージング中の Rails (3.2.17) アプリのすべてのロギングを 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 に送信されます)。

しかし、私はこのアプローチは非常に醜いと思います。誰かがこれに対してよりクリーンなアプローチを得ましたか?

4

1 に答える 1

0

sidekiq の所有者と話し合ったところ、彼は良い点を指摘してくれました。プロセスが開始されてからイニシャライザが実行されるまで、多くのことがうまくいかない可能性があります。ロガーがイニシャライザでのみ初期化されている場合、以前に発生したことはすべてログに表示されません。

おそらく、sidekiq の所有者が推奨するアプローチを使用します。

bundle exec sidekiq | logger -t sidekiq
于 2014-04-11T15:45:41.033 に答える