ログの書式設定のための基本的なコマンドは以下の様になります。
LOGFORMAT format-- 直ぐに、format が何であるかを述べます。LOGFORMAT コマンドは、同じ環境設定ファイル内の後のほうに位置した LOGFILE コマンドで指定された、ログファイルのみに適用されます。従って、LOGFORMAT を、参照すべき LOGFILE の上に書かなければなりません。このようにして、異なるログファイルは、異なる書式を持つことができます。例として、以下を挙げます。
LOGFILE log0 LOGFORMAT format1 LOGFILE log1 LOGFORMAT format2 LOGFILE log2 LOGFILE log3この例では、log1 は format1 であり、log2 と log3 は format2 であり、そして log0 はどの書式にも属していない。 -- analog は、このログファイルがどの書式なのかを見つけようとする。
APACHELOGFORMAT (%h %l %u %t \"%r\" %s %b)(括弧は、引数にスペースが含まれるので必要である。) analog は、Apache の "%...{format}t" という構造を解析できないという例外を除いて、Apache のログ書式を理解してくれる。もしこの構造があったときには、通常の LOGFORMAT を代わりに使用しなければならない。
analog が承知している全ての組み込み書式に対する書式用の単語がある。もしログファイルが標準書式の時には、これらのうちのひとつの単語が必要かもしれないが、analog は、何らかの理由でどの書式であるのかは検知できない;例えば、多分最初の行が壊れてしまっている;あるいは、多分 analog が北米時間か国際時間を使用しているのかどうかを判断できない。従って例えば、
LOGFORMAT COMMONは、共通書式を選択する;また、以下のオプションがある;COMBINED、 REFERRER, BROWSER, EXTENDED、 MICROSOFT-NA (北米時刻書式)、 MICROSOFT-INT (国際時刻書式)、 WEBSITE-NA、WEBSITE-INT、 MS-EXTENDED (マイクロソフトの拡張書式)、 MS-COMMON (幾つかのマイクロソフト版のバグの多い共通書式)、NETSCAPE または WEBSTAR。これら全ての書式は、前章の終わり に定義されている。自動判別のための特別な単語 AUTO を使うこともできる。
もしあなたのログファイルが、認識可能な書式でない時には、ログ書式の文字列を用いて、analog に教えることができる。ログファイルが標準書式の一つでないときに限り、これが必要である。そしてたとえ標準書式でなくとも、もし Apache のウェブサーバを使っているなら、上記で述べた APACHELOGFORMAT の方がやさしいことが分かるであろう。
書式用の文字列は、以下の様に種々の項目や特殊文字をコードで置き換えた、ログファイルの各行に対するテンプレートからなっている。これらのコードは大小文字を区別するので注意が必要である。 -- 例えば、%b は%B とは全く異なる!
jay.bird.com - fred [25/Dec/1998:17:45:35 +0000] "GET /~sret1/ HTTP/1.0" 200 1243は、LOGFORMAT コマンドで以下の様に表される。
LOGFORMAT (%S - %u [%d/%M/%Y:%h:%n:%j %j] "%j %r %j" %c %b)要するに、単なる見本の行であるが、ホスト名は %S で置き換えられ、ユーザ名は %u で置き換えられ、等々である。(括弧は、引数がスペースを含むために必要である。)または、別の例として、もし以下のような行があったとしたら、
Fri 25/12/98 5:45pm, /~sret1/, jay.bird.com, 200, 1243, http://www.site.com, Mozilla/2.0 (X11; I; HP-UX A.09.05)以下の書式が使える。
LOGFORMAT (%j %d/%m/%y %h:%n%am, %r, %S, %c, %b, %f, %B)
LOGFORMAT COMMON LOGFORMAT COMBINED LOGFILE log1 LOGFORMAT (%j %d/%m/%y %h:%n%am, %r, %S, %c, %b, %f, %B) LOGFILE log2 LOGFILE log3log1 は、共通と組み合わせ書式の両方を持つが、log2 と log3 は、一つ前の例の書式の行のみを持つ。
もし幾つかの書式が指定された場合、analog はまずは最初の書式に各行が一致するかどうかを試し、もし失敗した時には次を試し、等々と行う。そのため、書式の順番は大事である。通常は、不適切な書式と行が一致するかどうかを試すのに割く時間を最小にするために、最も一般的なものを最初に置く。
それでは、最初の例に戻ろう。
LOGFILE log0 LOGFORMAT format1 LOGFILE log1 LOGFORMAT format2 LOGFILE log2 LOGFILE log3ここでは、log0 は実際には初期設定のログ書式を取り。もし、DEFAULTLOGFORMAT コマンドが無ければ、初期設定は自動的に認識されるであろう。しかし、もし DEFAULTLOGFORMAT コマンドが別の環境設定ファイルにでもあれば、それが log0 の書式となるでしょう。
LOGFORMAT の代わりに DEFAULTLOGFORMAT を使う必要があるときは、LOGFILE コマンドで与えることができないログファイルの書式、これを変えたい時でしょう。 -- 例えば、コマンドラインで指定したもの、または Mac で analog のアイコンの上にドラッグしたもの、またはコンパイルした時に指定したもの。もしログファイルが常に同じ書式であれば、DEFAULTLOGFORMAT を使えば良い。そうすれば、充分な数の LOGFORMAT を適切な位置に置くことに頭を悩まさずに済む。
"Unix 時刻", %U は、常に GMT (グリニッジ標準時間)で記録される。そのため、おそらく LOGTIMEOFFSET コマンドを使って、地域時刻に変換する必要があるだろう。また、時間の整数部分だけであるので、少数がある場合には、%U.%j の形を使わなければならないだろう。
analog が取り扱えるログの書式は、即解読可能 として知られているものだけである:実際のところ、これは、文字列を終わらせる文字が文字列中に現れないという事を意味する。従って例えば、共通書式では、以下の様に見える。
LOGFORMAT (%S - %u [%d/%M/%Y:%h:%n:%j %j] "%j %r %j" %c %b)もしホスト名がスペースを含んでいたとしたら、その行は、以上行とされるでしょう。何故なら、analog は、スペース=ダッシュ=スペースが最初に起きる場所では なく、最初のスペースの所でホスト名を終わらせてしまい、残りの行は、一致するかどうかを見ないでしょう。もちろん、ホスト名はスペースを含むはずは無いので、これは問題とはならない。他にも幾つかの制限がある。もし、何らかの日にちか時刻の情報があった場合、年度、月、日にち、時間、分は全てなくてはならない。そして、同じ情報は、2度と書式には現れない (従って例えば、%m と %M の両方は、指定できない。何故なら、これらは両方とも、月を表すからであり、もう片方を無視するために %j をすべきである )。
時には、ログファイルのある項目を読む必要があるが、解析する必要が無い場合がある。例えば、別々の共通ログと参照ログがあり、参照ログが以下の様になっているとする。
http://guide-p.infoseek.com/Titles -> /~sret1/analog/しかし、/~sret1/analog/ へのリクエストは、主たるログファイルを読み込んだ時に既に勘定されてしまっているため、このときにもう一度勘定に入れたくない。書式の文字列に、以下の様に * を指定することによりこれを避けることができる。
LOGFORMAT (%f -> %*r)
助言:ログファイルの一行全体が認識可能な文字で終わる限り、2個かそれ以上の隣接している場を無視するために、一個の %j をもって指定すると、時々より効率的になる。従って、共通書式は、以下の様に指定するとより効率的になる。
LOGFORMAT (%S - %u [%d/%M/%Y:%h:%n:%j] "%j %r %j" %c %b)-- 日にちと時刻に於いて [25/Dec/1998:17:45:35 +0000] 、秒と時間帯は、一つの %j で閉じ角括弧のところまで無視される。
もう一つの助言:%j は、analog が使用しない場ではなく、行全体を無視するために使うこともできる。例えば、拡張ログ書式は、# で始まる行を以下の様に書けば無視する。
LOGFORMAT #%jそして、マイクロソフトの書式は、以下の様にすれば FTP のリクエストに相当する部分を無視する。
LOGFORMAT (%*S, %*u, %m/%d/%y, %h:%n:%j, %j)もしそれらの書式が使われなかったとしたら、相当する行は異常行として扱われるでしょう。
jay.bird.com - fred [25/Dec/1998:17:45:35 +0000] "GET /~sret1/ HTTP/1.0" 200 1243 LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r%wHTTP%j" %c %b) LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r" %c %b)
jay.bird.com - fred [25/Dec/1998:17:45:35 +0000] "GET /~sret1/ "HTTP/1.0" 200 1243 LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r%w"HTTP%j" %c %b) LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r" %c %b)
jay.bird.com - fred [25/Dec/1998:17:45:35 +0000] "GET /~sret1/ HTTP/1.0" 200 1243 "http://www.site.com/" "Mozilla/2.0 (X11; I; HP-UX A.09.05)" LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r%wHTTP%j" %c %b "%f" "%B") LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r" %c %b "%f" "%B")
[25/Dec/1998:17:45:35] http://www.site.com/ -> /~sret1/ or http://www.site.com/ -> /~sret1/ LOGFORMAT ([%d/%M/%Y:%h:%n:%j] %f -> %*r) LOGFORMAT (%f -> %*r)
[25/Dec/1998:17:45:35] Mozilla/2.0 (X11; I; HP-UX A.09.05) LOGFORMAT ([%d/%M/%Y:%h:%n:%j] %B)
192.64.25.41, -, 12/25/98, 17:45:35, W3SVC1, HOST1, 192.16.225.10, 2178, 303, 1243, 200, 0, GET, /~sret1/, -, LOGFORMAT (%S, %u, %m/%d/%y, %h:%n:%j, W3SVC%j, %j, %v, %T, %j, %b, %c, %j, %j, %r, %q,) LOGFORMAT (%*S, %*u, %m/%d/%y, %h:%n:%j, %j)
192.64.25.41, -, 25/12/98, 17:45:35, W3SVC1, HOST1, 192.16.225.10, 2178, 303, 1243, 200, 0, GET, /~sret1/, -, LOGFORMAT (%S, %u, %d/%m/%y, %h:%n:%j, W3SVC%j, %j, %v, %T, %j, %b, %c, %j, %j, %r, %q,) LOGFORMAT (%*S, %*u, %d/%m/%y, %h:%n:%j, %j)
12/25/98 17:45:35 jay.bird.com host1 Server fred GET /~sret1/ http://www.site.com/ Mozilla/2.0 (X11; I; HP-UX A.09.05) 200 1243 2178 LOGFORMAT (%m/%d/%y %h:%n:%j\t%S\t%v\t%j\t%u\t%j\t%r\t%f\t%j\t%B\t%c\t%b\t%T)
25/12/98 17:45:35 jay.bird.com host1 Server fred GET /~sret1/ http://www.site.com/ Mozilla/2.0 (X11; I; HP-UX A.09.05) 200 1243 2178 LOGFORMAT (%d/%m/%y %h:%n:%j\t%S\t%v\t%j\t%u\t%j\t%r\t%f\t%j\t%B\t%c\t%b\t%T)