6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails】sidekiqでログを出力するための方法を、公式リファレンスから理解する

Last updated at Posted at 2022-05-17

概要

Docker環境で、sidekiqログをローカルで見ようとしたらやり方がわからなかったので備忘録として残します。

内容

公式リファレンスを参考にしながら進めます。
早速実際の様子です。

class YourWorker
  include Sidekiq::Worker

  def perform(*args)
    logger.info "Things are happening."
    logger.debug { "My args: #{args.inspect}" }
  end
end

logeer.infoを利用する

def perform以下を見てください。logger.info/debugと記載されています。

このlogger.〇〇(ログレベルが入ります)の後ろに、出力したい変数やエラーメッセージなどを指定します。

もう少し例を具体的にみてみましょう。
例えば、事前に処理した変数をsidekiq側に送れているかどうかをチェックしたいとすると、以下のように記述します。

sidekiq.rb
=begin
事前に処理した変数
=end
update_hoge_objects = {user: {name: "saito"}, {age: "25"}}

=begin
hoge_worker.rb
=end
class HogeWorker
  include Sidekiq::Worker

  def perform(update_hoge_objects)
    logger.info update_hoge_objects
  end
end

=begin
出力結果
=end
=> {user: {name: "saito"}, {age: "24"}}

これで、ログの出力方法が分かりました。

sidekiqのログレベルについて

どこで設定すればいいのかわかりませんが、環境ごとに出力するログレベルは変更できるようです。

ひとまずここでは、infoで進めます(自分の環境ではinfoレベルだったため)が、この辺のレベル設定はrailsのログレベルと同じです。

参考:ログレベル

ログの重要度
←低                                         高→
debug → info → warn → error → fatal → unknown 

ちなみに、自分のローカル環境のレベルを確認するには、後述するログの確認方法で見ることができる、以下のようなログを確認してください。

2050-08-06T06:00:39.891Z 1 TID-xxxxx HogeFugaWorker JID-xxxxxxxxxxxxxxxxxxxxxxxxxx INFO: start

最後のあたりにINFOという文字が確認できると思います。
ここで表示されているのがローカル環境のログレベルです。

この場合はINFOなので、logger.infoとします。

ログの見方

ここまでで、出力したいログを表示するためには、logger.ログレベルと記述することを確認しました。

では、実際にログの内容を見るためにはどうすれば良いでしょうか?

railsのログ(development.logとか)では、見ることができません。なぜなら、sidekiq.logというファイルが別に生成されているためです。

これも設定が必要なことではありますが、通常は以下のように設定されていると思います。

config/sidekiq.yml
:logfile: ./logs/sidekiq.log

今回は、このように設定されている場合のログファイルの確認方法を見ていきます。

手順としては、以下の通りです。

1. docker exec -itコマンドでsidekiqコンテナに入る
2. sidekiq.logが格納されているディレクトリまで移動する
3. catコマンドでファイルを展開する

順に見ていきましょう。

1. docker execコマンドでsidekiqコンテナにイン

まずはdocker psコマンドでsidekiqのコンテナidを見つけ、そのコンテナidを利用してsidekiqコンテナに侵入します。

その前に、コンテナはdocker-compose up等で起動させておきましょう。

docker exec -it コンテナid bash

これで入ることができると思います。

2. sidekiqが格納されているディレクトリまで移動

コンテナに入ったら、コンテナのルートディレクトリから移動する必要があります。

どこにsidekiq.logが格納されているかについては、先ほどの記載しましたが、sidekiq.ymlに以下のような記載がある場合はそれを参考します。

:logfile: ./logs/sidekiq.log

今回は、logsディレクトリに格納されているようなので、以下のようにcdコマンドでディレクトリを移動します。

cd logs

3. catコマンドでファイルを展開

sidekiq.logが格納されているディレクトリに移動出来たら、いよいよsidekiq.logを開きます。

ファイルの展開は、catコマンドを使います。

cat sidekiq.log

これでうまくいくと、先ほど確認したようなsidekiqのログがズラーっと表示されるはずです。

2050-08-06T06:00:39.891Z 1 TID-xxxxx HogeFugaWorker JID-xxxxxxxxxxxxxxxxxxxxxxxxxx INFO: start
2050-08-06T06:00:39.891Z 1 TID-xxxxx HogeFugaWorker JID-xxxxxxxxxxxxxxxxxxxxxxxxxx INFO: {user: {name: "saito"}, {age: "25"}}
2050-08-06T06:00:39.891Z 1 TID-xxxxx HogeFugaWorker JID-xxxxxxxxxxxxxxxxxxxxxxxxxx INFO: done

これで、ログを確認することができました!

注意点

これで基本の見方はわかりましたが、sidekiqは1つ注意が必要なことがあるので補足します。

それは、ファイルを編集した時には、sidekiqを再起動しないと変更が適応されないことです

なので、dockerを利用している場合は、一度コンテナを停止させて、起動し直すか、こちらの記事で書かれている方法もローカルでは正常に機能することが確認できています。

いずれにせよ、再起動しないとsidekiqへの変更が適応されないため、logger.infoを記述して、そのまま処理を走らせてもログが表示されないので注意が必要です。

まとめ

sidekiqさん、いつも大量のデータをぶん投げても対応してくれてありがとう。

参考

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?