Tech Sketch Bucket of Technical Chips by TIS Inc.

意外と知らないCapistrano2系のログレベル

Pocket

この記事はeXcale Developer's Blogから移転されたものです。

eXcale開発チームの平井です。

eXcale では、その裏側の仕組みで、サーバのセットアップやアプリケーションのデプロイ処理にCapistranoを使っています。
今回は、Capistrano 2系でのログレベル変更方法と変更による違いをご紹介します。ログレベルを指定することで、出力情報を制御することができます。

>>eXcaleは期間限定でサインアップキャンペーン実施中!気になる内容はこちら<<


前準備

ここでは、Capistranoそのものの説明はしません。Capistranoそのものに関しては、eXcaleチームの西谷が寄稿した『特集 DevOps時代の必須知識:まとめてたくさん処理したい! を解決する「Capistrano」 - @IT』などの情報をご参照ください。また、Capistranoの最新版は3系ですが、本記事では2系を対象としています。

Capistrano実行時のログを確認するためのコードとして以下を使用します。
コードの内容としては、localhostに対して、lsコマンドを実行しています。
exec_ls_succタスクはコマンド成功時、exec_ls_failタスクはコマンド失敗時のログを確認するために用意しています。
そのため、以下を実行する際は、事前にファイル( /tmp/foo/bar )を成しておく必要がります。
また、username、passwordは実行時の環境に併せて変更してください。
Capistrano v2.15.5で実行を確認しています。

ログレベル指定なしでの実行

特にログレベルを指定しない状態で実行すると以下のようになります。
それぞれ、lsコマンドを実行して、一方は成功、もう一方は失敗していることがわかります。
また、その実行しているタスク名や実行対象のサーバ、実行したコマンド、コマンドの出力結果、実行時間も確認することができます。

  • exec_ls_succ実行結果
  • exec_ls_fail実行結果

ログレベルの指定

では、次にログレベルを変更した形で実行してみます。
ログレベルを指定するように変更したコードは以下になります。
ログレベルは、logger.level = Logger::DEBUG のように指定します。
Capistrano2系では、TRACE、DEBUG、INFO、IMPORTANTを指定することが出来ます。

TRACE指定での実行

ログレベルを指定していなかった場合と同じ出力となります。

  • exec_ls_succ実行結果
  • exec_ls_fail実行結果

DEBUG指定での実行

TRACEに比べ、実行対象のサーバ、実行時間の情報がなくなっています。

  • exec_ls_succ実行結果
  • exec_ls_fail実行結果

INFO指定での実行

DEBUGに比べ、実行するタスク名、実行したコマンドの情報がなくなっています。

  • exec_ls_succ実行結果
  • exec_ls_fail実行結果

IMPORTANT指定での実行

INFOに比べ、コマンド成功時の出力結果の情報がなくなっています。
(exec_ls_succタスクは成功しているので出力がないです)

  • exec_ls_succ実行結果
  • exec_ls_fail実行結果

最後に

このように、ログレベルを指定することで、出力情報を制御することができます。
また、出力されているログの先頭に表示される*の数がログレベルと関係していることがわかります。(IMPORTANTは*が0個、INFOは1個、DEBUGは2個、TRACEは3個)
次回はログの出力フォーマットのカスタマイズについてご紹介したいと思います。

エンジニア採用中!私たちと一緒に働いてみませんか?