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?

【 Ruby / JavaScript 】Rails.logger と logger.warn の違いをJavaScriptと比較しつつ解説

Posted at

はじめに

Railsでログを出力するとき

Rails.logger.warn "警告ログ"

と書くか

logger.warn "警告ログ"

と書くか、迷ったことはありませんか?

この記事では、Rails.loggerlogger.warn の違いを「機能」「用途」「JavaScriptの感覚」に分けてわかりやすく解説します。

基本的な機能について

Rails.loggerlogger.warn は、出力されるログや 動作は基本的に同じ です。
ただし 使う場所意図 によってどちらを選ぶかが変わってきます。

JavaScript的に例えると…

Rails.logger.warn

console.warn()

に相当(どこでも使える グローバルなロガー )です。

logger.warn

this.logger.warn()

に相当( クラスに渡されたロガー を使う)ことになります。

JavaScriptで書くとこう

// Rails.logger のイメージ
console.warn("グローバルなログ");

// logger のイメージ
class Job {
  constructor(logger) {
    this.logger = logger;
  }

  run() {
    this.logger.warn("クラス専用のログ");
  }
}

Rails.logger と logger.warn の機能説明

項目 Rails.logger logger(→ logger.warn)
定義元 Rails全体 各クラス(Controller、Jobなど)
ログ出力レベル .info, .warn, .error など対応 同様に .warn などが使える
出力先 log/development.log 同じく Rails.logger と同じ出力先
実体 ActiveSupport::Logger 通常 Rails.logger を内部で参照

ActiveSupport::Logger
標準Logger(Ruby標準ライブラリ)を拡張したクラス

簡易的な違い

比較項目 Rails.logger.warn logger.warn
使える場所 どこでも(グローバル) クラス内でのみ(ローカル)
可読性 冗長になりやすい スッキリ書ける
実体 常に Rails.logger 通常は Rails.logger を指す

具体的な違いのコード例

# ジョブ内での使用例
class NotifyJob < ApplicationJob
  def perform
    logger.warn "これはlogger経由の警告"
    Rails.logger.warn "これはRails.logger経由の警告"
  end
end

この2つ、ログ出力結果は全く同じになります。

実務でのおすすめ運用

結論として、Railsのクラス(Controller / Job / Modelなど)では…
logger.warn を使うのが一般的でおすすめ!

理由

  • Railsが logger メソッドを用意してくれている(= Rails.logger のエイリアス)
  • クラス内部で短く書けて読みやすい
  • テスト時にロガーを差し替える設計にも対応しやすい

例外的に Rails.logger を使う場面

シチュエーション 理由
lib/ や初期化スクリプト logger が定義されていない
グローバルで一貫したログ出力をしたいとき 明示的に Rails.logger を使いたい場合

まとめ

書き方 特徴 実務おすすめ度
Rails.logger.warn グローバル。どこでも使える △(場面による)
logger.warn クラス内。簡潔で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?