6
2

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 3 years have passed since last update.

こちらはAteam Finergy Inc. Advent Calendar 2019 - Qiita 16日目の記事になります。

はじめに

Railsのログ出力に標準の形式以外のものを使いたいことがあると思います。

例えばエイチームフィナジーのサービスでは、ログ解析にCloudWatchLogsやElasticSearchやKibanaを使用しています。
これらのサービスと連携するために、JSON形式のほうが扱いやすいので、RailsのログをJSON形式で出力しています。

この記事では、JSON形式でログ出力をするためのsemantic_loggerというgemを紹介します。

semantic_loggerとは

semantic_loggerとは、Ruby Railsのログ出力をカスタマイズすることができるgemです。
JSON形式でログ出力する設定をできます。

Rocket Jobというジョブスケジュールシステムを作っているところが作っています。

導入方法

今回はrailsのログをjsonで出力する方法を紹介しようと思います。

  1. Gemfileに追加

    gem 'rails_semantic_logger'
    
  2. bundle install

    bundle install
    
  3. rails server起動

    bundle exec rails s
    
  4. 確認

    2019-12-08 11:49:38.614204 D [20892:puma threadpool 003] ActionView -- Rendering -- {:template=>"vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/templates/rails/welcome/index.html.erb"}
    2019-12-08 11:49:38.619906 D [20892:puma threadpool 003] (5.616ms) ActionView -- Rendered -- {:template=>"vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/templates/rails/welcome/index.html.erb"}
    2019-12-08 11:49:38.620177 I [20892:puma threadpool 003] (11.4ms) Rails::WelcomeController -- Completed #index -- {:controller=>"Rails::WelcomeController", :action=>"index", :format=>"HTML", :method=>"GET", :path=>"/", :status=>200, :view_runtime=>6.71, :db_runtime=>0.0, :status_message=>"OK"}
    

ファイル出力しない設定

例えばAWS ECS Cloudwatch Logs連携をしていたりする場合、標準出力からCloudwatch Logsへログの内容が送られるため、ファイル出力が不要です。

なのでその場合の設定を追記します。

touch config/initializers/semantic_logger.rb
config/initializers/semantic_logger.rb
config.rails_semantic_logger.add_file_appender = false
config.semantic_logger.add_appender(io: $stdout, level: config.log_level, formatter: :json)

puma clustered modeを使用する場合

puma でclustered modeを使用している場合はpuma.rbの設定をする必要がありますので、追記します。

config/puma.rb
on_worker_boot do
  # Re-open appenders after forking the process
  SemanticLogger.reopen
end

まとめ

このようにsemantic_loggerを使用することによって、簡単にJSONのログ出力をすることができました。

Railsを使っているプロジェクトでログ出力をカスタマイズしたい場合に便利なので、使ってみてください。

6
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?