【Rails入門】loggerの使い方まとめ

こんにちは! フリーエンジニアの長瀬です。

今回はlogger(ロガー)の使い方について一緒に学んでいきましょう。

loggerを使えば、Railsで簡単にログを出力できます。

この記事では、loggerの使い方について

・loggerの設定方法

という基本的な内容から、

・ログの色付けを行う方法

といった応用的な内容についても解説していきます。

loggerとは

loggerはログを出力するために、Railsにあらかじめ用意されている機能です。

また、loggerの機能はActiveSupportクラスを継承したLoggerクラスによって構成されています。

loggerを使えば、簡単にログを出力できます。

なので、バグの原因を探すときなどに便利です。

loggerの設定方法

loggerは

・config/application.rb
・config/evironments/development.rb
・config/evironments/production.rb
・config/evironments/test.rb

のいずれかの初期設定ファイルであればconfig.〇〇〜で始まるコードで設定できます。

記事の後半で説明しますが、どのファイルにloggerを設定するかで環境別にログの出力ができます。

以下はlogger設定のサンプルコードです。

config.logger = Logger.new(STDOUT)

もしくは

config.logger = Logger.new('log/development.log')

でロガーを設定できます。

Logger.new関数では第1引数にログを保存する場所を指定できます。

STDOUTは標準出力にログを出力する場合の引数です。

また、標準設定でのログの出力先はlog/development.logになっています。

上記のように設定できれば、Model、Controller、Viewでログを出力できます。

では実際に出力してみましょう。

以下、出力のサンプルコードです。

<% logger.debug "log/development.logにログが出力されています。" %>

また、log/development.log以外のファイルに保存したい場合は独自にLogger.newの引数にファイルの場所を指定できます。

標準以外のファイルを指定するサンプルコード

config.other_logger = Logger.new('log/development_other.log') 

独自にファイルを指定し、保存した場合は出力する際のコードも変わります。

以下、出力のサンプルコードです。

<% Rails.application.config.ohter_logger.debug "log/development_other.logにログが出力されています。" %>

これでlog/development_other.logに保存するログを保存することができました。

このように、log/development.log以外のファイルにも簡単にログを保存できます。

ログレベルを設定する方法

loggerでは、ログにレベルを設定できます。

ログレベルは以下6つあり、そのログの内容によって使い分けます。

unknown(常にログとして出力される必要がある未知のメッセージ)
fatal(プログラムをクラッシュさせる制御不可能なエラー)
error(制御可能なエラー)
warn(警告)
info(システム管理についての一般的、または役に立つ情報)
debug(開発者のための低いレベルの情報)

ログレベルは

unknown>fatal>error>warn>info>debug

の順に出力が優先されます。

ログレベルを設定するには

・config/application.rb
・config/evironments/development.rb
・config/evironments/production.rb
・config/evironments/test.rb

のいずれかのファイルであれば以下のサンプルコードで設定できます。

config.log_level = :unknown
config.log_level = :fatal
config.log_level = :error
config.log_level = :warn
config.log_level = :info
config.log_level = :debug 

例えば

config.log_level = :fatal

の場合、fatal以下のerror、warn、info、debugのレベルのログは出力されなくなります。

そして、

config.log_level = :unknown

の場合はログレベルがunknown以外は出力されなくなります。

(unknownのログレベルが一番高いからです)

また、
上記のファイル以外でログレベルを設定したい場合は以下のコードでできます。

Rails.logger.level = 5

Rails.logger.levelは0〜5までの数値でログレベルを設定します。

番号に対応して

0(debug)
1(info)
2(warn)
3(error)
4(fatal)
5(unknown)

となっています。

では次は、出力の際にログレベルを設定してみましょう。

logger.〇〇の値をログレベルに応じて変更するだけです。

以下は実際のレベル別でのログ出力のサンプルコードです。

<% logger.debug "log/development.logにdebugレベルでログが出力されています。" %>
<% logger.info "log/development.logにinfoレベルでログが出力されています。" %>
<% logger.warn "log/development.logにwarnレベルでログが出力されています。" %>
<% logger.error "log/development.logにerrorレベルでログが出力されています。" %>
<% logger.fatal "log/development.logにfatalレベルでログが出力されています。" %>
<% logger.unknown "log/development.logにunknownレベルでログが出力されています。" %>

このように、ログレベルよってログの出力を制限して管理できます。

ログレベルを設定しておくと、レベルに応じてログの出力を減らすことができて効率的です。

環境ごとにログを設定する方法

環境ごとにログを設定するには、ログを設定するファイルを使い分けます。

環境名設定ファイル名
本番環境config/evironments/production.rb
開発環境config/evironments/development.rb
テスト環境config/evironments/test.rb

ログの出力フォーマットを設定する方法

<% logger.unknown "log/development.logにレベルunkwnownでログが出力されました" %>

たとえば、上記のコードでログを出力するとき、フォーマットの設定がされていないなら

実行結果

log/development.logにレベルunkwnownでログが出力されました

と出力されます。

ここで、標準の出力フォーマットを設定してみます。

以下は標準の出力フォーマットを設定するコードです。

config.logger.formatter = ::Logger::Formatter.new

と設定すると、ログの出力が変わり

実行結果

A, [2017-06-26T10:27:53.706386 #6909]   ANY -- : log/development.logにレベルunkwnownでログが出力されました

と出力されるように変わります。

先頭のAはANY(unknownレベル)のAです。

またフォーマットは独自に変更できて、

config.logger.formatter = proc do |severity, datetime, progname, msg|
  "プログラム名は#{progname} ログレベルは#{severity} ログの内容は#{msg} 日付は#{datetime} \n"
end

と設定すると

実行結果

プログラム名は ログレベルはANY ログの内容はlog/development.logにレベルunkwnownでログが出力されました 日付は2017-06-26 10:52:32 +0900

と出力されます。

プログラム名はとくに設定されていないと空(=nil)のままです。

ですので、ログ設定時に

cofig.logger.progname = 'チュートリアル'

とprognameを設定してみると

実行結果

プログラム名はチュートリアル ログレベルはANY ログの内容はlog/development.logにレベルunkwnownでログが出力されました 日付は2017-06-26 10:56:33 +0900

と出力されるように変わります。

このように標準の出力が見にくいと感じている方は独自のフォーマットを設定してみてはいかがでしょうか。

ログの色付けを行う方法

ログに色をつけるにはcolorize(カラライズ)というgemを使うと便利です。

まず、Gemfileに

gem 'colorize'

と記述し、コマンドプロンプトで

bundle install

と打ち込んでcolorizeをインストールします。

 
インストール後は文字列の後に.colorize(:色の名前)で、簡単にログに色をつけることができます。

以下、色をつけるサンプルコードです。



<% logger.unknown "(赤色)log/development.logにレベルunkwnownでログが出力されました".colorize(:red) %>
<% logger.unknown "(黄色)log/development.logにレベルunkwnownでログが出力されました".colorize(:yellow) %>
<% logger.unknown "(青色)log/development.logにレベルunkwnownでログが出力されました".colorize(:blue) %>

実行結果
Screen Shot 2560-06-28 at 23.38.02

このようにログに色をつけることができました。

colorizeで使用可能な色は下記の仕様書から参照しています。

参照元: Github colorize

ですので、色の種類はこちらを参考にしてください。

また、背景色を設定もできます。

 <% logger.unknown "(黒に背景が赤)log/development.logにレベルunkwnownでログが出力されました".colorize(:black).on_red %>

実行結果
Screen Shot 2560-06-28 at 23.23.27

このようにcolorize(:色の名前).on_色の名前で背景色を設定できました。

まとめ

いかがでしたでしょうか?

この記事では、loggerの使い方を解説しました。

環境別にログを設定したり、ログレベルを設定したりすれば、ログの管理はしっかりできます。

また、重要なログには色をつけて他と区別するのもいいですね。

この機会にぜひ管理しやすいようにログを設定し直してみてはいかがでしょうか。

もし、loggerの使い方について忘れてしまったらこの記事を確認してくださいね!

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

長瀬来

長瀬来

Unityを使ったiOSアプリのリリース、フリマサイト運営の経験があります。

経験した言語はC、C#、Javascript、R、Python、Ruby、PHPなど

言語が好きで、英語や中国、ドイツ語を勉強しました。
将来的には海外で生活したいです。

現在はRuby on Rails5やCocos2dxの勉強を主にしています。

ライターとしては
できるだけ初心者にわかりやすい文章になるように心がけています。

趣味は語学、読書です。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説