(2018.12.16 追記) hacknet_trace は標準出力および Port への書き出し、または全てのイベントを関数でハンドリングすることしかできません。これだと、Phoenix プロジェクトでは気軽に使えないので、
- Plug 化
- Elixir の Logger への対応
- トレース内容の文字列を関数でハンドリング
に対応したモジュールを plug_hackney_trace として公開しました。
hackney_trace とは?
多くの Elixir (Erlang) プロジェクトで使われている HTTP ライブラリである hackney の、内部で起こっていることをトレースできるモジュールが hackney_trace です。
すべてのトレースを標準出力に
iex> :hackney_trace.enable(:max, :io)
:ok
こんな感じで色々な情報が出力されます。
iex(3)> HTTPoison.get("http://google.co.jp")
[hackney trace 80 <0.545.0> 2018:12:14 03:56:23 4723] request
Content: [{module,hackney},
{line,307},
{method,get},
{url,{hackney_url,hackney_tcp,http,<<"google.co.jp">>,<<>>,
<<"/">>,<<>>,<<>>,"google.co.jp",80,<<>>,<<>>}},
{headers,[]},
{body,<<>>},
{options,[]}]
[hackney trace 60 <0.545.0> 2018:12:14 03:56:23 4723] request without proxy
Content: [{module,hackney},{line,679}]
[hackney trace 60 <0.545.0> 2018:12:14 03:56:23 4723] connect
Content: [{module,hackney_connect},
{line,35},
{transport,hackney_tcp},
{host,"google.co.jp"},
{port,80},
{dynamic,true}]
[hackney trace 80 <0.545.0> 2018:12:14 03:56:23 4724] no socket in the pool
Content: [{module,hackney_connect},{line,230},{pool,default}]
トレースの無効化
iex> :hackney_trace.disable()
stop trace at 2018:12:14 03:59:09 419
:ok