Nginxでデバック用のログを出力する方法

  • うすき
    うすき システムちーむ
  • このエントリーをはてなブックマークに追加

nginxで設定変更など行っているときに、
実際にどんな値が入っているか確認したい場合があるかと思います。

そんな時に、簡単にログを出力して確認する方法をまとめてみました。

設定方法

httpコンテキストの定義内にログフォーマットの設定を追記します。
今回はdebug.logを新たに作り、そこに出力させてみたいと思います。


http {
    log_format   debug   'time:$time_local\t'    # 時刻
                         'status:$status\t'      # ステータス
                         'value:$value';         # 値

    access_log   /var/log/nginx/debug.log  debug;
}
『httpディレクティブ』 …HTTPサーバに関する設定
『log_formatディレクティブ』 …出力するログの書式を定義する
  ・構文: log_format フォーマット名 ログの書式文字列
  ・コンテキスト: http


server {
    set $value "hoge";
}
『serverディレクティブ』 …IPアドレス、ポート、ホスト名ごとに別々の設定を持つ複数のHTTPサーバを定義する
『setディレクティブ』 …nginxの内部変数に文字列をセットする
  ・構文: set $変数名 値;
  ・コンテキスト: server, location, if

この状態で、nginxをリロード後、ブラウザからアクセスしてみます。


time:17/Dec/2016:13:56:32 +0900 status:404      value:hoge

無事debug.logにログが書き出されました。

主な変数

その他にも、アクセスログで使用できる主な変数名を紹介します。

変数名 説明
$time_local リクエストの処理を開始したローカルタイム
$remote_addr リモートホストのアドレス
$host マッチしたサーバ名もしくはHostヘッダの値、なければリクエスト内のホスト
$request_method リクエストされたHTTPメソッド
$request_uri リクエストに含まれるクエリストリング付きのオリジナルのURI
$server_protocol リクエストプロトコル
$request_time リクエスト処理にかかった時間
$body_bytes_sent ヘッダなどを含まないレスポンスボディのバイト数
$status レスポンスのHTTPステータスコード
$http_referer リファラ
$http_user_agent ユーザエージェント文字列

こういったログを活用することで、
開発やデバックが必要なときなど色々な場面で利用できると思います。

このエントリーをはてなブックマークに追加

うすきが最近書いた記事

WRITERS POSTS もっと見る

他にもこんな記事が読まれています!

  • WEB
  • マーケティング
  • サーバー・ネットワーク
  • ライフスタイル
  • お知らせ