Posted at

railsのログについて


はじめに

Railsのログについて調べてみた。


ログの書き方

ログの書き方は

logger.debug("message")

みたいに書く

ログにはレベルがあるらしく

下から

debug=>info=>warn=>error=>fatal=>unknown

という感じらしい

そしてデフォルトではすべてのログが出力されているから

Started GET "/users" for 127.0.0.1 at 2018-12-22 18:24:26 +0900

Processing by UsersController#index as HTML
[0;33;49musers/indexにアクセス[0m
Rendering users/index.html.slim within layouts/application
Rendered users/index.html.slim within layouts/application (1.5ms)
Completed 200 OK in 26ms (Views: 23.4ms | ActiveRecord: 0.0ms)

Started GET "/users" for 127.0.0.1 at 2018-12-22 18:24:26 +0900
Processing by UsersController#index as HTML
[0;33;49musers/indexにアクセス[0m
Rendering users/index.html.slim within layouts/application
Rendered users/index.html.slim within layouts/application (1.3ms)
Completed 200 OK in 24ms (Views: 22.1ms | ActiveRecord: 0.0ms)

Started GET "/users" for 127.0.0.1 at 2018-12-22 18:24:26 +0900
Processing by UsersController#index as HTML
[0;33;49musers/indexにアクセス[0m
Rendering users/index.html.slim within layouts/application
Rendered users/index.html.slim within layouts/application (1.4ms)
Completed 200 OK in 25ms (Views: 22.9ms | ActiveRecord: 0.0ms)

こんな感じでいろいろ出力される

ログのレベルを変えると表示も変わる

ログのレベルの変え方は

config/application.rbに

config.log_level = :unknown

みたいに書く

この例だとunknownしか表示されない

debugにするとすべて表示される感じ。

とりあえず試しに

config.log_level = :unknownとしてdef indexに

def index

logger.unknown("users/indexにアクセス")
@users = User.all
end

と書いてindexにアクセスしてみる

そうするとログは

[0;33;49musers/indexにアクセス[0m

[0;33;49musers/indexにアクセス[0m

みたいに表示される。


ログの色を変える

ログの色を変えて表示したい場合はcolorizeというgemを使う


gemfile

gem 'colorize'


bundle install

としたら準備ok

書き方は

logger.unknown("hello?".colorize(:yellow))

みたいに文字列のあとにcolorize(:color)で色を付けられる。


例外処理のログを出力

例外処理を行ってエラーが起きたらそのエラーのログを色付きで表示してみる。

createアクションにこんなコードを書く


create

def create 

begin
@user = Userrrr.create(user_params)
rescue => e
logger.unknown("ユーザー作成中にエラーが発生したよ~~~\n#{e}".colorize(:red))
ensure
redirect_to users_path
end
end

Userのスペルが間違っているのでエラーが出る。

rescueでエラーを補足して => e みたいしてeにエラーの情報を渡せる。

これで

[0;31;49mユーザー作成中にエラーが発生したよ~~~

uninitialized constant UsersController::Userrrr[0m

が色付きで表示される。


おわりに

development.log以外のログファイルを作ってそこにログを出力させるということもできるらしいけどそれに関してはまた調べる。

もうすぐクリスマスだなぁ

おわり:snowman: