情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Herokuアプリケーションのログについて

Herokuアプリケーションを実行するとシステムログやアクセスログやエラーログなどの様々なログが出力されます。また、Herokuアプリケーション自身がログを出力することもできます

ログは最大で1500個まで保持されます。古いログは適宜廃棄されますので注意してください(ログを保存するには廃棄が行われる前に明示的に保存を行う必要があります)。

ログの形式

ログは下のような形式で出力されます。

timestamp source[dyno]: message
  • timestamp・・・ログが出力された日時をSyslog形式の日時として表します。
  • source・・・ログの発生源を表します。発生源がシステムである場合にはherokuとなり、Herokuアプリケーションである場合にはappとなります。
  • dyno・・・ログのsourceより細かい発生源を表します。sourceherokuである場合にはログが発生したシステムの構成要素の名称となり、appである場合には仮想マシンの名称となります。
  • message・・・メッセージを表します。

なお、アクセスログは下のようなものになります。

2012-10-11T03:47:20+00:00 heroku[router]: at=info method=GET path=/ host=myapp.herokuapp.com request_id=8601b555-6a83-4c12-8269-97c8e32cdb22 fwd="204.204.204.204" dyno=web.1 connect=1ms service=18ms status=200 bytes=13
  • at・・・ログの重要度を表します。必ずinfoとなります。
  • method・・・HTTPリクエストのメソッドを表します。
  • path・・・HTTPリクエストのリクエストターゲットのパス部分以降を表します。
  • host・・・HTTPリクエストのリクエストターゲットのホスト部分(HTTPリクエストのHostヘッダフィールドの値)を表します。
  • request_id・・・HTTPリクエストのHerokuにおける識別子を表します。
  • fwd・・・HTTPリクエストを送信したクライアントのIPアドレスを表します。
  • dyno・・・HTTPリクエストを処理した仮想マシンの名称を表します。
  • connect・・・HTTPリクエストがHerokuのルータに到着してからクライアントとHTTPリクエストを処理する仮想マシンとの間の接続が確立するまでに掛かった時間をミリ秒単位で表します。
  • service・・・クライアントとHTTPリクエストを処理する仮想マシンとの間のデータのやり取りに掛かった時間をミリ秒単位で表します。
  • status・・・HTTPレスポンスのステータスコードを表します。
  • bytes・・・HTTPレスポンスの長さをバイト単位で表します(HTTPレスポンスのボディの長さではなくHTTPレスポンス全体の長さですので注意してください)。

また、エラーログは下のようなものになります。

2012-10-11T03:47:20+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path=/ host=myapp.herokuapp.com request_id=8601b555-6a83-4c12-8269-97c8e32cdb22 fwd="204.204.204.204" dyno=web.1 connect= service=30000ms status=503 bytes=0
  • at・・・ログの重要度を表します。必ずerrorとなります。
  • code・・・エラーコードを表します。エラーコードの一覧については下の記事を参照してください。
  • desc・・・エラーに対する説明を表します。
  • cause・・・エラーの原因を表します。

ログの出力

Herokuアプリケーションからログを出力するには標準出力や標準エラー出力にメッセージを出力します。

これは逆に言えば標準出力や標準エラー出力に出力した全てのものがHerokuアプリケーションのログとして出力されるということです。

ただし、10000バイトより大きなメッセージは10000バイト単位で複数のログに分割されますので注意してください。

ログの表示

Herokuアプリケーションのログを表示するにはheroku logsコマンドを実行します。

heroku logsコマンドには下のようなオプションを付加することができます。

  • -a--app)・・・Herokuアプリケーションの名称を指定します。デフォルトは現在のフォルダに存在するHerokuアプリケーションの名称です。
  • -r--remote)・・・HerokuアプリケーションのGitリポジトリのリモートの名称を指定します。
  • -s--source)・・・ログの発生源を指定します。
  • -d--dyno)・・・ログのsourceより細かい発生源を指定します。
  • -n--num)・・・表示するログの最大数を指定します。ただし、1500以下でなければなりません。デフォルトは100です。
  • -t--tail)・・・ログを表示した後、ログの受信を続ける場合にはこのオプションを指定します。このオプションを指定すると、ログを表示した後もコマンドは終了せず、新しいログが発生した場合にはそのログが続けて表示されます。

たとえば、下のようにします。

C:\work\heroku\app1>heroku logs -s heroku -n 10
2017-01-31T14:15:55.981488+00:00 heroku[router]: at=info method=GET path="/img/ecma.jpg" host=shrouded-refuge-29302.herokuapp.com request_id=a173638a-d458-4f37-86fe-f9a7d775d273 fwd="182.50.166.226" dyno=web.1 connect=0ms service=2ms status=304 bytes=215
2017-01-31T14:15:56.004972+00:00 heroku[router]: at=info method=GET path="/css/main.css" host=shrouded-refuge-29302.herokuapp.com request_id=e968cf8e-1801-4dba-8227-8d99ad4a26ae fwd="182.50.166.226" dyno=web.1 connect=0ms service=3ms status=304 bytes=215
2017-01-31T14:16:00.976276+00:00 heroku[router]: at=info method=GET path="/tag/series/2.htm" host=shrouded-refuge-29302.herokuapp.com request_id=740006aa-0e75-4a8c-9800-d01bab63242f fwd="182.50.166.226" dyno=web.1 connect=0ms service=1ms status=200 bytes=12791
2017-01-31T14:16:01.345162+00:00 heroku[router]: at=info method=GET path="/css/main.css" host=shrouded-refuge-29302.herokuapp.com request_id=d123d0c0-f8b0-4689-a3d1-b0b87f802d81 fwd="182.50.166.226" dyno=web.1 connect=1ms service=2ms status=304 bytes=215
2017-01-31T14:16:01.327495+00:00 heroku[router]: at=info method=GET path="/img/ecma.jpg" host=shrouded-refuge-29302.herokuapp.com request_id=4dbb0f27-17cb-4360-8e8f-8d5918199c4e fwd="182.50.166.226" dyno=web.1 connect=0ms service=1ms status=304 bytes=215
2017-01-31T14:49:19.405409+00:00 heroku[web.1]: Idling
2017-01-31T14:49:19.407065+00:00 heroku[web.1]: State changed from up to down
2017-01-31T14:49:20.118210+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2017-01-31T14:49:20.279337+00:00 heroku[web.1]: Process exited with status 143
pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Heroku