LoginSignup
1
1

More than 5 years have passed since last update.

Capistrano3 でrailsのログを tail -f する

Last updated at Posted at 2019-04-22

capからでもログを終えるようにしておくと意外と便利なので備忘録も兼ねて投稿しておきます。

環境

Capistrano 3.10

コード

deploy.rb
set :format_options, truncate: false

namespace :log do
  desc "tail log"
  task :tail do
    on roles(:app) do
      execute "tail -f #{shared_path}/log/#{fetch(:rails_env)}.log"
    end
  end
end

tailコマンドをexecuteするだけです。
set :format_options, truncate: falseはCapistrano3で有効になるログの省略を無効化しています。必須ではないですがログを見るときは省略されてしまうとまずいので設定しておくと良いです。

$ bundle e cap log:tail
︙
01 I, [2019-04-23T02:57:49.673509 #292]  INFO -- : [a64c8da5-4ee1-44f5-8592-7fffc4dbcb72] Rendered text template (0.0ms)
01 I, [2019-04-23T02:57:49.673509 #292]  INFO -- : [a64c8da5-4ee1-44f5-8592-7fffc4dbcb72] Completed 200 OK in 3ms (Views: 0.4ms | ActiveRecord: 0.6ms)

追記

ホストが複数ある場合は以上の方法ではどのホストのログか判断できません。
xargsが使える環境では以下のように書けばホスト名が一緒に表示できます。

deploy.rb
set :format_options, truncate: false

namespace :log do
  desc "tail log"
  task :tail do
    on roles(:app) do
      execute "tail -f  #{shared_path}/log/#{fetch(:rails_env)}.log | xargs -L1 echo [`hostname`]"
    end
  end
end

追記2

Airbrusshを利用しているならモンキーパッチでホスト名を表示することもできます。
以下のように書けば色分けできるので見やすいです。
今のところ標準で対応することはないらしいので、見栄えは悪いですが割り切るしかないですね。

module Airbrussh
  class CommandFormatter < SimpleDelegator
    @@colors = {}

    def format_output(line)
      host = user_at_host
      @@colors[host] ||= Airbrussh::Colors::ANSI_CODES.keys[@@colors.size]
      host = send( @@colors[host], "[#{host}]" )
      "#{number} #{host} #{line.chomp}"
    end
  end
end
1
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
1
1