Apache日志输出的要点
日志格式字符串
以下是用于Apache日志格式的字符串。
我个人按照我认为的重要性进行排序。
フォーマット文字列意味%tリクエスト時刻%aリモートIPアドレス%>sHTTPステータス%Dリクエスト処理にかかった時間(マイクロ秒)%mリクエストメソッド%UURLのパス部分。クエリ文字列は含まない%qクエリストリング%{Referer}iリファラ%{User-Agent}iユーザーエージェント%{Foobar}iリクエスト中の*Foobar**ヘッダの内容。よく使うものは後述。%{Foobar}Cリクエスト中のFoobarクッキーの値%I受信バイト数(ヘッダ含む)。利用にはmod_logioが必要。l(エル)ではなくI(アイ)%O送信バイト数。利用にはmod_logioが必要%bレスポンスのバイト数(HTTPヘッダは除く)。CLFフォーマット、つまり1バイトとも送られなかった場合は
-
になる%Bレスポンスのバイト数(HTTPヘッダは除く)。%AローカルIPアドレス%fURLから導き出されたファイルシステム上のファイル名。このファイル名のファイルが存在するとは限らない。%sHTTPステータス。内部でリダイレクトされた場合は最初のステータス%{FOOBAR}e環境変数FOOBARの値%Hリクエストプロトコル%{Foobar}oレスポンス中のFoobarヘッダの内容%pサーバーのポート%Pリクエストを処理した子プロセスのプロセスID%{format}tリクエスト時刻(formatで指定した書式)%Tリクエスト処理にかかった時間(秒)%vサーバー名(ServerName)%Vサーバー名(UseCanonicalNameの設定によるもの)%lリモートログ名。mod_identを使っていない限り-
になる。I(アイ)ではなくl(エル)。%uBasic認証のユーザー名%hクライアントのホスト名またはIPアドレス。HostnameLookups
がOn
に設定されている場合のみホスト名の解決を試みる%rリクエストの最初の行%X応答が完了した時の接続ステータス。(X: 応答完了前に接続が異常終了、+: 応答完了後に接続維持が可能、-: 応答完了後に接続断)%%パーセント文字日志配置方法
Apache的日志格式在httpd.conf等文件中预先定义了几种模式,如下所示。
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
然后,在服务器设置和虚拟主机设置中,您可以选择日志路径和使用的格式如下。
CustomLog logs/access_log common
您可以自行定义要使用的日志格式。
只需要在 httpd.conf 文件中添加以下行即可。
LogFormat "%t %a %>s" ore_no_format
以自定义的格式进行操作时,操作步骤与常规格式相同,如下所示。
CustomLog logs/access_log ore_no_format
合并的日志输出示例
202.241.168.146 - - [18/Jan/2015:03:10:20 +0900] "GET /images/logo.png HTTP/1.1" 404 313 "http://tech.artizan.co/index.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36"
用LTSV进行输出的示例
我经常使用的是以下这种LTSV格式的表格。实际上并没有换行。
LogFormat "ts:%t\\t
ip:%a\\t
status:%>s\\t
method:%m\\t
path:%U\\t
query:%q\\t
referer:%{Referer}i\\t
ua:%{User-Agent}i\\t
usec:%D\\t
received:%I\\t
sent:%O" ltsv