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