はじめに
Loggly
本番環境で複数のサーバーを使っているので、ログを見やすくするためにlogglyを使っていた。
Loggly https://www.loggly.com/
railsでlogglyを使う場合の手順として、公式ドキュメントが用意されていたのでこの通りにconfigを書いていた。
=> https://www.loggly.com/docs/rails-logs/
ActiveJob
ActiveJobを使うと非同期の処理が行えるようになる。
ただし、ActiveJobは数多ある非同期ライブラリのインターフェースを統一するものなので、内部ではsidekiqやdelayed_job等を開発者が自由に選択し設定する。
問題
ActiveJobを使っていると、自動的にキューに登録された時や、ジョブが実行された時になどにログを出力してくれるようになる。
だがここで current_tags
というメソッドを呼んでいるが、Sysloggerにはそれが実装されていないのでエラーしてしまう。
syslogger activejob error current_tags
等でググるとこのissueが見つかった
=> https://github.com/rails/rails/issues/19439
何やらもめている(?)ようで、パッチを送っているがまだマージされていない。
というかそもそもこのパッチで直るのかどうかも知らんけど。
解決方法
rails側ではなくsyslogger側から探してみたらまさにピッタリのissueを発見
=> https://github.com/crohr/syslogger/issues/29
結局のところLogglyのドキュメント通りにではなく、SysloggerをActiveSupport::TaggedLogging.newでラップしてあげればいいみたい。
- config.logger = Syslogger.new("rails-application",Syslog::LOG_PID, Syslog::LOG_LOCAL7)
+ config.logger = ActiveSupport::TaggedLogging.new(Syslogger.new("rails-application", Syslog::LOG_PID, Syslog::LOG_LOCAL7))
まとめ
基本logglyなんて本番でしか動かさないし、まさかloggerとActiveJobの組み合わせでエラーするとか、かなり渋い