Apache のカスタムログ設定で、特定の HTTP ステータスコードのときのみログを出力する方法を教えてください。SetEnvIf で指定できると思って調べてみたのですが、有力な情報が見つかりませんでした。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/11/17 00:31:20
  • 終了:2007/11/24 00:35:04

回答(1件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402007/11/17 11:24:31

ポイント60pt

通常リクエストに応じてログを制御する場合、 SetEnvIf や mod_rewrite を使いますが

あくまで「リクエスト時点」の情報しか見れないのでレスポンスのステータスコードによる振り分けはできません。

また、レスポンスによって制御するディレクティブも標準では存在しないようです。


mod_log_config - Apache HTTP Server

CustomLog ディレクティブではログをファイルではなくプログラムに渡すことができるので、

それを使用するのが一番現実的かと思います。


ざっくりとですが、標準の CommonLog 形式の場合、ステータスコード 200 をとりたければ、

CustomLog "| egrep 'HTTP/1.[01]\" 200' >> logs/success_log"

などとすればよいかと思います。(実際に試していないので、このまま動くかどうかはわかりませんが)

  • id:naoya_nakazawa
    naoya_nakazawa 2007/11/25 19:42:06
    ありがとうございます!
    試してみたのですが、すべてのログが出力されています。
    パイプが使えそうなので、調べてみます!
  • id:naoya_nakazawa
    naoya_nakazawa 2007/11/25 20:45:37
    今原因を調べてみますが、どうも 'HTTP/1.[01]\" の部分の " がうまく認識してくれないようです。
    エラーログに、次のような内容で出力されます。

    /bin/sh: -c: line 0: unexpected EOF while looking for matching `"'
    /bin/sh: -c: line 1: syntax error: unexpected end of file
    piped log program ' egrep 'HTTP/1.[01]"' >> logs/success_log' failed unexpectedly
    /bin/sh: -c: line 0: unexpected EOF while looking for matching `"'

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません