Logger

参考:

ロガー | Rails ガイド [Official]

ActiveSupport::Logger | Ruby on Rails API [Official]

class Logger (Ruby 2.6.0)

使い方

参考:

Rails のログについて (Rails.logger) | 酒と涙とRubyとRailsと

バッチの実行ログを専用のログファイルと標準出力の両方に出す | おどるダメ人間

Rails で log を出力し debug する – Qiita

Rails 4.x 本番環境で SQL の実行ログを表示したい場合の設定 | GENDOSU@NET

Rails でログを出力してみる | yk5656 diary

Rails のログの読み方 | Reinvent Yourself

アプリで puts, logger コマンドを実行した時の log / 標準出力 について – Qiita

Rails でのログ / ロガーまとめ (ログ出力、ログレベル、ロガー作成、ログフォーマット) | Rails Webook

ログを出力する

logger.debug "[debug] test#index"
logger.info  "[info]  test#index"
logger.warn  "[warn]  test#index"
logger.error "[error] test#index"
logger.fatal "[fatal] test#index"

参考:

ruby の Logger でログを出力する方法 | それマグで!

ログに書き出すログレベルを変更する | Rails つまみぐい

ロガーの設定

config.logger = ActiveSupport::Logger.new(
  "log/development.log"
)
config.log_level = :debug

参考:

ログに書き出すログレベルを変更する | Rails つまみぐい

ログが正しく出力されない | teratail

ログレベルの設定

設定されている以上のレベルのログが出力される。

config.log_level = :debug

優先されるログレベルの順序は次の通り。

fatal > error > warn > info > debug

参考:

ログに書き出すログレベルを変更する | Rails つまみぐい

ログを出力しよう! Rails で便利な logger の使い方 | TechAcademy マガジン

アクセスログ

参考:

Rails でリクエストの HTTP ヘッダを取得してログに出力する | xyk のブログ

カニでもできる Rails でアクセスログ実装 | かにぱんのなく頃に

rails server のログでリクエストヘッダとレスポンスヘッダを表示する | how to code something

How to log specific request details to rails server logs – Stack Overflow

スタックトレースを出力する

参考:

Rails でログファイルに例外トレース情報を出す | ありの日記

Rails で例外発生時にフルスタックトレースをログに出すには? | teratail

ローテーション

参考:

ログ出力とログローテートの設定まとめ | きゃまなかのブログ

Rails で Logger を使って Log ローテション | DoRuby

Rails5 + Puma で logrotate | ポンコツ.log

Ruby でのログローテーション – Qiita

安全なログローテーション | elm200 の日記

ファイルサイズ

参考:

megabytes | Railsドキュメント (railsdoc.com)

megabytes – Numeric | Ruby on Rails API [Official]

Pretty file size in Ruby? – Stack Overflow

initialize_logger

参考:

initialize_logger – rails/bootstrap.rb at v5.2.3 · rails/rails – GitHub

silence

ブロック内のログレベルを変更する。

LoggerSilence#silence(temporary_level = Logger::ERROR)

デフォルト (引数なし) ではログレベルが error に設定され、warn / info / debug のログ出力が抑制される。

Rails.logger.silence do
  # warn/info/debug are silenced here
end

参考:

silence – LoggerSilence | Ruby on Rails API [Official]

特定の条件で Rails のログ出力を抑止する – Qiita

How can I disable logging in Ruby on Rails on a per-action basis? – Stack Overflow

ActiveSupport::LogSubscriber

参考:

ActiveSupport::LogSubscriber | Ruby on Rails API [Official]

rails/log_subscriber.rb at 5-2-stable · rails/rails – GitHub

ActiveSupport::Subscriber

参考:

ActiveSupport::Subscriber | Ruby on Rails API [Official]

rails/subscriber.rb at 5-2-stable · rails/rails – GitHub

color

color(text, color, bold = false)

ログ出力用のテキストに色を付ける。

参考:

color – ActiveSupport::LogSubscriber | Ruby on Rails API [Official]

フォーマッター

参考:

ログにタイムスタンプを追加する方法 | うんたらかんたら Ruby

Ruby on Rails のログフォーマット変更 | Walk on apps.

instance method Logger#formatter= (Ruby 2.6.0)

Configuring Log Formatting in Rails | BigBinary Blog

Formatting of Rails logs when using ActiveRecord – Stack Overflow

How to format ruby logger? – Stack Overflow

コンソールでクエリログを出力する

ActiveRecord::Base.loggerlogger.formatter を設定する。

def with_logger(logger, formatter = nil)
  old_logger = ActiveRecord::Base.logger
  logger.formatter = formatter if formatter
  ActiveRecord::Base.logger = logger
  yield
  ActiveRecord::Base.logger = old_logger
end

with_logger(
  Logger.new(STDOUT),
  ActiveSupport::Logger::SimpleFormatter.new
) do
  User.find(1)
end

参考:

rails console 上での SQL 表示をデフォルトに | 継続的ブログ

ActiveRecord が生成する SQL を rails console 上に表示する | ABC Blog

ActiveRecord が生成する SQL を Rails のコンソールで確認する方法 | donghai821 の日記

rails console の SQL ログの表示を無効にする方法 – Qiita

binding.pry で sql 文を表示したい時のおまじない – Qiita

ActiveRecord で実行される SQL を script/console で確認するには | Pistolfly

Active Record で実行SQLを出力する方法 | ST40PG

instance method Logger#formatter= (Ruby 2.6.0)

ActiveSupport::Logger::SimpleFormatter | Ruby on Rails API [Official]

Watching ActiveRecord Do Its Thing | Buckblog

logger – rails/core.rb at v6.0.0.rc1 · rails/rails – GitHub

logger – rails/railtie.rb at v6.0.0.rc1 · rails/rails – GitHub

Display SQL queries in log with Rails 4 – Stack Overflow

Unable to turn off SQL logging in my Rails production environment – Stack Overflow

bloadcast

現在のログに加えて別のロガーにも出力する。

def with_broadcast(logger, formatter = nil)
  old_logger = ActiveRecord::Base.logger.dup
  logger.formatter = formatter if formatter
  ActiveRecord::Base.logger.extend(
    ActiveSupport::Logger.broadcast(logger)
  )
  yield
  ActiveRecord::Base.logger = old_logger
end

with_broadcast(
  Logger.new(STDOUT),
  ActiveSupport::Logger::SimpleFormatter.new
) do
  User.find(1)
end

参考:

broadcast – rails/logger.rb at v6.0.0.rc1 · rails/rails – GitHub

rails/railtie.rb at v6.0.0.rc1 · rails/rails – GitHub

Rake タスクのログ

参考:

タスクの賢いロギング – Qiita

タスクでクエリのログを標準出力に出す | このコードわからん

Better loging in rake tasks | macbury.ninja

puts vs logger in rails rake tasks – Stack Overflow

ActiveRecord::LogSubscriber

ActiveRecord が発光する SQL イベントの通知を購読してロガーに出力する LogSubscriber クラス

module ActiveRecord
  class LogSubscriber < ActiveSupport::LogSubscriber
    def sql(event)
      debug "#{event.payload[:name]} (#{event.duration}) #{event.payload[:sql]}"
    end
  end
end

LogSubscriberActiveRecord のイベントを購読させる。

ActiveRecord::LogSubscriber.attach_to :active_record

参考:

ActiveRecord::LogSubscriber | Ruby on Rails API [Official]

rails/log_subscriber.rb at v5.2.3 · rails/rails – GitHub

sql

SQL クエリのログを出力する。

参考:

ActiveRecord の SQL 実行をフックしていろいろやる | 昼メシ物語

ActiveRecord で発行されたクエリの数を計測してテストに利用する – Qiita

Rails のリクエストログの Completed 行に含まれる ActiveRecord の項目の数値の意味 – Qiita

ActiveSupport::Notifications で実行される SQL を確認する | web note (n8.hatenablog.com)

sql.active_record – Active Support の Instrumentation 機能 | Rails ガイド [公式]

sql – ActiveRecord::LogSubscriber | Ruby on Rails API [Official]

log – ActiveRecord::ConnectionAdapters::AbstractAdapter | Ruby on Rails API [Official]

log – rails/abstract_adapter.rb at v5.2.3 · rails/rails – GitHub

Payload names for ‘sql.active_record’ instrumentation · Issue #30586 · rails/rails – GitHub

Update payload names for `sql.active_record` instrumentation to be more descriptive. by jagthedrummer · Pull Request #30619 · rails/rails – GitHub

Update payload names for `sql.active_record` to be more descriptive. · jagthedrummer/rails@fda9df7 – GitHub

How to log Rails queries before they happen? – Stack Overflow

ActiveSupport::Logger

参考:

ActiveSupport::Logger | Ruby on Rails API [Official]

rails/logger.rb at 5-2-stable · rails/rails – GitHub

ActiveSupport::Logger::SimpleFormatter

参考:

rails のログフォーマットを変更する | tumblr (shim0mura)

ActiveSupport::Logger::SimpleFormatter | Ruby on Rails API [Official]

SimpleFormatter – rails/logger.rb at v5.2.3 · rails/rails – GitHub

ActiveSupport::TaggedLogging

参考:

ActiveSupport::TaggedLogging | Ruby on Rails API [Official]

TaggedLogging で ActiveRecord のログを調査しやすくする方法 – Qiita

rails4 における TaggedLogging の謎 | tumblr (shim0mura)

Building a Custom Logger with Active Support Tagged Logging | The Great Code Adventure

rails/tagged_logging.rb at 5-2-stable · rails/rails – GitHub

仕組み

参考:

Rails の logger 周りのコードリーディング | freedom-man.com

Instrumentation API

参考:

Active Support の Instrumentation 機能 | Rails ガイド [公式]

ActiveSupport::Notifications

参考:

Rails の計測を支える ActiveSupport::Notifications について | GMO メディア エンジニアブログ

ActiveSupport::Notifications | Ruby on Rails API [Official]

ActiveSupport::Notifications should be async? – Stack Overflow

notifier

参考:

rails/notifications.rb at v5.2.3 · rails/rails – GitHub

ActiveSupport::Notifications::Instrumenter

参考:

ActiveSupport::Notifications::Instrumenter | Ruby on Rails API [Official]

rails/instrumenter.rb at 5-2-stable · rails/rails – GitHub

instrument

ブロックを実行して、実行に掛かった時間を計測してイベントの通知を行う。エラーが発生した場合には例外情報をセットして通知を行う。

ActiveSupport::Notifications.instrument(
  "event_name.my_module",
  info1: value1,
  info2: value2
) do
  # Do something
end

参考:

instrument – ActiveSupport::Notifications | Ruby on Rails API [Official]

instrument – ActiveSupport::Notifications::Instrumenter | Ruby on Rails API [Official]

start

イベント開始の通知を行う。

参考:

start – ActiveSupport::Notifications::Instrumenter | Ruby on Rails API [Official]

finish

イベント完了の通知を行う。

参考:

finish – ActiveSupport::Notifications::Instrumenter | Ruby on Rails API [Official]

ActiveSupport::Notifications::Event

参考:

ActiveSupport::Notifications::Event | Ruby on Rails API [Official]

publish

参考:

The 10-minute Rails Pub/Sub | Dimitris Zorbas

Fanout

イベントの通知を登録されている全ての購読に送信する。

イベント通知のデフォルト実装。全てのメソッドは再入可能 (スレッドセーフ) である。

参考:

rails/fanout.rb at 5-2-stable · rails/rails – GitHub

LogSubscriber

参考:

rails/action_controller/log_subscriber.rb at 5-2-stable · rails/rails – GitHub

rails/action_view/log_subscriber.rb at 5-2-stable · rails/rails – GitHub

rails/active_record/log_subscriber.rb at 5-2-stable · rails/rails – GitHub

rails/active_storage/log_subscriber.rb at 5-2-stable · rails/rails – GitHub

rails/rack/logger.rb at 5-2-stable · rails/rails – GitHub

ActionController::Instrumentation

参考:

ActionController::Instrumentation | Ruby on Rails API [Official]

rails/instrumentation.rb at 5-2-stable · rails/rails – GitHub

ActionView::AbstractRenderer

  • instrument

参考:

instrument – rails/abstract_renderer.rb at v6.0.0.rc1 · rails/rails – GitHub

Tips

参考:

Rails Logger and Rails Logging Best Practices | DZone Web Dev

Log4r

参考:

colbygk/log4r: Log4r is a comprehensive and flexible logging library for use in Ruby programs. It features a heirarchical logging system of any number of levels, custom level names, multiple output destinations per log event, custom formatting, and more. – GitHub

Rails4 に Log4r を設定する – Qiita

log4r の基本的な使い方のメモ | 是非に及ばず

log4r で log の rotation をする方法 | 東京伊勢海老通信

log4r に日付でローリングしてほしかった話 – Qiita

Lograge

参考:

roidrage/lograge: An attempt to tame Rails’ default policy to log everything – GitHub

Rails でリクエストの HTTP ヘッダを取得してログに出力する | xyk のブログ

Rails のログをなんとかしたい人生だった – Qiita

activerecord-cause

参考:

joker1007/activerecord-cause: This gem logs where ActiveRecord actually loads record – GitHub

ActiveRecord の読み込みが実際にトリガーされた場所をログに記録する gem – Qiita

activerecord-cause を詠む | CHAMAO BLOG

Log which line caused a query | jkfill blog

active-record-query-trace

参考:

brunofacca/active-record-query-trace: Rails plugin that logs/displays a backtrace of all SQL queries executed by Active Record – GitHub

rails-flog

参考:

pinzolo/rails-flog: Rails log formatter for Parameters and SQL – GitHub

rails-flog を使って Rails の development ログのハッシュと SQL を見やすくする | Rails Webook

Silencer (gem)

参考:

stve/silencer: Easily suppress the Rails logger – GitHub

rack-timeout

タイムアウト時にログを出力する。

参考:

sharpstone/rack-timeout: Abort requests that are taking too long – GitHub

Rails でタイムアウトのエラーをログに出力する方法 – Qiita

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です