1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【 React / RubyonRails 】「puts だけでいいの?」Reactエンジニアにもわかる Rails におけるログ出力と logger の使い方

Posted at

はじめに

Railsでエラーが起きたとき、つい puts を使ってしまいがち。でも、それって React で console.log だけで済ませるのと同じ…?

今回は、フロントエンジニアでも感覚的に理解しやすいように、Railsにおける putslogger の違いを、Reactでのログ出力と比較しながらわかりやすく解説します。

想定読者

・普段 React や Next.js を使っているフロントエンジニア
・Rails に触れ始めた初学者(バックエンドのエラー処理を理解したい)
puts でデバッグしているが、logger との違いがわからない人

ReactとRailsのログ出力を比較してみる

やりたいこと React Ruby / Rails
一時的なログ出力 console.log(...) puts
エラー出力 console.error(...) logger.error(...)
ログの記録・監視 Sentry, LogRocket Rails.logger, Rollbar
ログレベルの設定 warn, info, etc. warn, info, etc.

puts を使ってみる(Reactでいう console.log)

begin
  do_something
rescue => e
  puts "エラー発生: #{e.message}"
end

どこに出力される?
⇒ 標準出力(=開発時のターミナル)だけ。

ログレベルは?
⇒ なし! info や error のような区別はできません。

本番で使える?
⇒ ×(出力されるだけで、残らないし見逃しやすい)

logger を使うとどうなる?(Reactでいう console.error + ログ保存)

begin
  do_something
rescue => e
  Rails.logger.error("エラー発生: #{e.message}")
end

出力先

log/development.loglog/production.log に記録される。

ログレベルでの分類が可能

Rails.logger.debug("デバッグ情報")
Rails.logger.info("通常ログ")
Rails.logger.warn("注意喚起")
Rails.logger.error("エラー発生")
Rails.logger.fatal("致命的エラー")

本番環境にも対応

後からログを見返したり、監視サービスと連携できる!

ログ出力のベストプラクティス(React経験者向けまとめ)

シーン 推奨方法(Rails)
一時的に何か出力したい puts でもOK(開発中限定)
本番でのエラー記録 Rails.logger.error(...)
ユーザー行動や処理追跡 logger.info, logger.debug
監視や可視化が必要な場面 ログレベルを使い分ける

まとめ

puts は一時的なデバッグ向け。Reactでの console.log と同じ。

logger はログレベルごとに記録・分析が可能。Reactで console.error を使ったり Sentry を導入する感覚に近い。

Railsでは Rails.logger を活用することで、本番運用でも活きるログ設計ができる。

1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?