【Rails】Railsのログの読み方
はじめに
Railsのログについて、実装の過程で出てきたログをもとに読み方をまとめてみた。
ログの格納場所
Railsは実行環境ごとに異なるログファイルを出力される。
ログの格納場所は、デフォルトでRails.root/log/となっており、ログのファイル名は、アプリケーションが実行されるときの環境が使用される。
<具体例>
development環境 → development.log
test環境 → test.log
production環境 → production.oog
ログの内容
正常処理時
基本となるGET、POST、PATCH、DELETE別に解析してみた。
一覧表示【GET】
Started GET "/users" for 127.0.0.1 at 2017-06-06 00:03:08 +0900 Processing by UsersController#index as HTML Rendering users/index.html.erb within layouts/application [1m[36mUser Load (0.2ms)[0m [1m[34mSELECT "users".* FROM "users"[0m Rendered users/index.html.erb within layouts/application (9.2ms) Completed 200 OK in 1069ms (Views: 1050.6ms | ActiveRecord: 1.7ms)
1行目
Started [メソッド] [アクセス先] for [アクセス元IP] at [時間]
→ いつ、どこから、どのメソッドでどんなアクセスがされたか
2行目
Processing by [コントローラ名#メソッド名] as HTML
→ 処理が行われたコントローラとメソッド名と取得した形式
3行目
Rendering [レンダリングされたビューファイル名] within layouts/application
→ レンダリングの内容
4行目
[1m[36mUser Load (0.2ms)[0m [1m[34mSELECT “users”.* FROM “users”[0m
→ [1m[36とか謎の文字列がある。これは、
ANSI shell color codes というものらしく、以下のstackoverflowに情報があった。 stackoverflow.com
上記を取り除くと
mUser Load (0.2ms) SELECT “users”.* FROM “users”
となり、mUserが読み込まれ、ログにあるようなSQLが流れたことを示す。0.2msはかかった時間。
5行目
Rendered users/index.html.erb within layouts/application (9.2ms)
→ layouts/application内でusers/index.html.erbがレンダリングされた。
6行目
Completed 200 OK in 1069ms (Views: 1050.6ms | ActiveRecord: 1.7ms)
→ HTTPステータスコードと処理にかかった時間が表示される。
(ちなみに「200 OK」は、リクエスト成功時に返すレスポンスコード)
データの作成【POST】
Started POST "/users" for 127.0.0.1 at 2017-06-06 06:33:30 +0900 Processing by UsersController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"YyULtXbbHrvd0PtDCocKrWIHSBGfbYJ/xD8V0TyWlWnRiEvFAP0Vu7Aaf/3V9t2FijWXRyLWKiMfbWxIPmjI6A==", "user"=>{"name"=>"aba", "text"=>"a"}, "commit"=>"Create User"} [1m[35m (0.1ms)[0m [1m[36mbegin transaction[0m [1m[35mSQL (1.0ms)[0m [1m[32mINSERT INTO "users" ("name", "text", "created_at", "updated_at") VALUES (?, ?, ?, ?)[0m [["name", "aba"], ["text", "a"], ["created_at", "2017-06-05 21:33:30.094146"], ["updated_at", "2017-06-05 21:33:30.094146"]] [1m[35m (0.9ms)[0m [1m[36mcommit transaction[0m Redirected to http://0.0.0.0:3000/users/2 Completed 302 Found in 7ms (ActiveRecord: 2.1ms)
(重複したログは省略)
3行目
Parameters: [パラメータの内容]
パラメータの内容。ちなみにパスワードなどはログに書き込まれたくないので、
config/initializers/filter_parameter_logging.rb
Rails.application.config.filter_parameters += [:password]
で、フィルタをかける項目の定義が行える。 なお、フィルタの項目は、ログでは[FILTERED]に置き換えられる。
4行目
begin transaction
→ トランザクションの開始
5行目
実行されたSQL
6行目
commit transaction
→ トランザクションのコミット
7行目
Redirected to [リダイレクト先のURL]
→ 記載のURLにリダイレクトされた
データの更新【PATCH】
Started PATCH "/users/2" for 127.0.0.1 at 2017-06-06 06:33:39 +0900 Processing by UsersController#update as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"c6CWUAYKwBihYJh+GCoOZv1XMgALdnzrA6mC9nqVa1bz1gajw3KZ696HEUg28xh00SIriwfZDIktPesXZymLyA==", "user"=>{"name"=>"abad", "text"=>"ad"}, "commit"=>"Update User", "id"=>"2"} [1m[36mUser Load (0.2ms)[0m [1m[34mSELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?[0m [["id", 2], ["LIMIT", 1]] [1m[35m (0.1ms)[0m [1m[36mbegin transaction[0m [1m[35mSQL (0.6ms)[0m [1m[33mUPDATE "users" SET "name" = ?, "text" = ?, "updated_at" = ? WHERE "users"."id" = ?[0m [["name", "abad"], ["text", "ad"], ["updated_at", "2017-06-05 21:33:39.981554"], ["id", 2]] [1m[35m (0.9ms)[0m [1m[36mcommit transaction[0m Redirected to http://0.0.0.0:3000/users/2 Completed 302 Found in 8ms (ActiveRecord: 1.8ms)
目新しいログは無し
データの削除【DELETE】
Started DELETE "/users/1" for 127.0.0.1 at 2017-06-06 06:33:26 +0900 Processing by UsersController#destroy as HTML Parameters: {"authenticity_token"=>"vMMe9vhpLIjJ+6/krjCuflIVGEJ15gxwEAbQ0FBZiJNchaAIqXiX52Ntps6ZM94rVyg6NLNXxkTBP7ec4qFMRg==", "id"=>"1"} [1m[36mUser Load (0.3ms)[0m [1m[34mSELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?[0m [["id", 1], ["LIMIT", 1]] [1m[35m (0.1ms)[0m [1m[36mbegin transaction[0m [1m[35mSQL (0.6ms)[0m [1m[31mDELETE FROM "users" WHERE "users"."id" = ?[0m [["id", 1]] [1m[35m (0.9ms)[0m [1m[36mcommit transaction[0m Redirected to http://0.0.0.0:3000/users Completed 302 Found in 8ms (ActiveRecord: 2.0ms)
こちらも目新しいログは無し
エラー発生時
Started GET "/users/new" for 127.0.0.1 at 2017-06-06 06:07:05 +0900 Processing by UsersController#new as HTML Rendering users/new.html.erb within layouts/application Rendered users/_form.html.haml (6.0ms) Rendered users/new.html.erb within layouts/application (10.3ms) Completed 500 Internal Server Error in 44ms (ActiveRecord: 1.8ms) ActionView::Template::Error (Illegal nesting: nesting within plain text is illegal.): 6: 7: %ul 8: user.errors.full_messages.each do |message| 9: %li = message 10: end 11: 12: %div{ class: "field" }
この時は、ビューでエラーを出してしまった。6行目で「500 Internal Server Error」の記述の後、 具体的な内容がログに出ている。
おまけ
ログファイルをクリアするコマンド
rake log:clear
おわりに
ほんの一例ではあるが、まずはログの場所と大まかな内容の理解ができた。