-
Notifications
You must be signed in to change notification settings - Fork 4
ログの出力
ohr486 edited this page Jul 17, 2016
·
5 revisions
現在のアプリの状況を知るために、ログにメッセージを出してみましょう。
標準出力にメッセージを出すには、IO.puts
やIO.inspect
を使えば実現できます。
$ iex -S mix
> IO.puts "hello, IO.puts"
hello, IO.puts
:ok
> IO.inspect Map.new
%{}
%{}
>
ログファイルにメッセージを出力する場合は、Logger
モジュールを使います。
ロガーの設定は、config/dev.exs
,config/test.exs
,config/prod.exs
で行います。
# config/dev.exs
# Do not include metadata nor timestamps in development logs
config :logger, :console, format: "[$level] $message\n"
詳しい設定等は、Loggerのドキュメントを確認してみてください。
ログはそれぞれ、debug
,info
,warn
,error
といったレベルがあり、
それぞれのレベルに合わせたメッセージを出力することができます。
Loggerモジュールはこのレベルに対応したマクロをもっているので、以下の様にそれぞれのレベルに応じたメッセージを出力することができます。
defmodule Test do
require Logger
def log_dump_test do
Logger.debug "Debugメッセージ"
Logger.info "Infoメッセージ"
Logger.warn "Warnメッセージ"
Logger.error "Errorメッセージ"
end
end
$ iex -S mix
> Test.log_dump_test
17:45:15.725 [debug] Debugメッセージ
17:45:15.726 [info] Infoメッセージ
17:45:15.726 [warn] Warnメッセージ
17:45:15.726 [error] Errorメッセージ
:ok
>
それでは練習として、http://localhost:4000/list
が呼ばれた時にログメッセージを出力してみましょう。
ロガーを仕込む箇所としては、web/controllers/list_controller.ex
のlist
アクションでよさそうです。
web/controllers/list_controller.ex
defmodule TokyoexHandsonDemo.ListController do
use TokyoexHandsonDemo.Web, :controller
# これを追加!
require Logger # infoマクロを使うためにrequire
def index(conn, _params) do
# これを追加!
Logger.info("/list accessed!") # メッセージをinfoレベルで出力
my_list = TokyoexHandsonDemo.Repo.all(TokyoexHandsonDemo.Article)
render conn, "index.html", list: my_list
end
end
iex -S mix phoenix.server
でPhoenixを起動して、/list
にアクセスするとメッセージが表示されます。
[info] GET /list
[debug] Processing by TokyoexHandsonDemo.ListController.index/2
Parameters: %{}
Pipelines: [:browser]
[info] /list accessed! # メッセージが表示される!
[debug] QUERY OK db=1.3ms decode=8.4ms
SELECT a0.`id`, a0.`title`, a0.`url`, a0.`og_title`, a0.`og_image`, a0.`og_description`, a0.`inserted_at`, a0.`updated_at` FROM `articles` AS a0 []
[info] Sent 200 in 121ms
見えましたか?