- PR -

Apacheのアクセスログ編集

1
投稿者投稿内容
トリックスター
大ベテラン
会議室デビュー日: 2003/04/16
投稿数: 104
投稿日時: 2005-11-04 14:54
こんにちは。

Apacheのアクセスログの
"GET /somewhere/index.html HTTP/1.1" 200 6566 "http://www.somedomain/somewhere/"

LogFormatで言うところの \"%r\" の部分ですが、

ディレクトリ構成、URLを変えることなく、
"GET /hoge/somewhere/index.html HTTP/1.1" 200 6566 "http://www.somedomain/somewhere/"
と決まった文字列を付記したいのですが、可能でしょうか?
やり方があれば教えてください。

よろしくお願いします。
FFM
会議室デビュー日: 2005/06/04
投稿数: 2
投稿日時: 2005-11-05 08:54
gawkで実現できます。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-11-05 10:30
おはようございます。
Apache側で実現するなら、LogFormatにそのままその決まった文字列を書けば良いと思います。
引用:
mod_log_configよりカスタムログ書式
LogFormat ディレクティブと CustomLog ディレクティブの書式を指定する引数は文字列です。この文字列を使ってそれぞれの リクエストがログファイルにログ収集されます。その文字列には ログファイルにそのまま書かれる文字列や、それぞれ改行とタブを現す C 言語 形式の制御文字 "\n" と "\t" とを含めることができます。そのまま出力させたい引用符とバックスラッシュは バックスラッシュでエスケープする必要があります。


もっとも、ログ解析等の後処理の中で、置換や挿入を行っても良いと思いますが。

追記:
余談ながら、自分でログ解析をする ( 市販の解析ソフト等は使わない ) なら、\t でタブ区切り形式にしてしまえば、後で処理が大変簡単に済みます。
※ タブ文字交じりのリクエスト等を故意に送られると困るかもしれませんが…。

[ メッセージ編集済み 編集者: angel 編集日時 2005-11-05 10:35 ]
トリックスター
大ベテラン
会議室デビュー日: 2003/04/16
投稿数: 104
投稿日時: 2005-11-05 12:37
こんにちは、ご回答ありがとうございます。

LogFormat の %r で、"GET /somewhere/index.html 〜"という
文字列なので、その途中に文字列を挿入するのは難しいかなと
考えております。

やはり、ログ収集後にawkなどで編集しないとできないですか。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-11-05 13:52
失礼しました。
「リクエスト中のURIの先頭に文字列付加」なのですね。
それは確かに難しいでしょうね。

…まぁ、全うなリクエストであれば、代替はできると思いますが…。
%r ではなく、次のようなフォーマットで。

 %m %U%q %H

なので、URIの先頭に“/hoge”を付けたければ、

 %m /hoge%U%q %H

となるでしょうか。
ただし、イレギュラーなリクエストには対応できませんし、ここまでやるものかどうかは分かりません。
※リクエストの証拠保全という意味合いなら %r は他には替えられませんし、アクセス解析用に URI の履歴を残したいだけなら、%U 等を使った方が勝る、と思います。

以上、ご参考まで。

[ メッセージ編集済み 編集者: angel 編集日時 2005-11-05 13:58 ]
トリックスター
大ベテラン
会議室デビュー日: 2003/04/16
投稿数: 104
投稿日時: 2005-11-05 15:18
angelさん、ありがとうございます!
たいへん参考になりました。

例えば、
%r:「GET /somewhere/index.html?name=value HTTP/1.1」(リクエスト情報)
に対して、
%m:「GET」(リクエストメソッド)
%U:「/somewhere/index.html」(リクエストパス)
%q:「?name=value」(クエリ文字列)
%H:「HTTP/1.1」(リクエストプロトコル)
ですね。

これで、ちょっと様子を見てみます。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)