無料のApacheログ解析ツールとしてWebLog Expert Liteを使用しています。
解析結果をHTML形式で出力してくれる優れものです。
(サンプルlog解析結果。当サイトの解析結果ではないです。。。)
しかし、コマンドライン引数が準備されていないため、定型処理化に難有りといったところです。
また、不要なログ(自分自身のアクセスなど)を解析対象から外すFilter機能がないため(有料版にはある)、
あらかじめログを整形してから渡す必要もあります。
そこで秀丸マクロによるログ整形と、WSH(VBA)スクリプトによる
WebLog Expert Liteの制御を行い、ログ解析処理をできるだけ自動化させてみました。
秀丸マクロによるログ整形
Apacheのログを開き、別名で保存した後、整形処理を行います。
整形処理後、さらにWebLog Expert Liteにログを渡すスクリプト(Analyze.vbs)を呼び出します。
この秀丸マクロを秀丸エディタのショートカットに登録して使います。
macro_server_log_edit.mac
//Apacheのログを整形し、WebLog Expert Lite制御用の //WSH(VBScript)スクリプトを実行する秀丸マクロ //処理が長い時のエラー抑制 seterrormode 1 0; //ApacheのログをOpen openfile "C:hoge\access.log"; //とりあえずbackupフォルダに別名で保存 saveas "backup\access_bak.log"; //ログ整形開始 //古い日付のログを削除するサンプル gofiletop;//先頭にカーソル移動 beginsel;//範囲選択開始 searchdown "^.*16/Jun/2010", regular;//カーソル移動 delete;//削除 //自分自身のアクセスを削除するサンプル //正規表現でマッチした行頭~改行を空文字に置換 replaceallfast "^127.0.0.1.*n", "", regular; replaceallfast "^localhost.*n", "", regular; replaceallfast "^192.168.0.*n", "", regular; replaceallfast "^c-loft.com.*n", "", regular; //ファイル名に日付を付けて保存(日々のバックアップ用) saveas "access_bak_"+year+month+day+hour+minute+".log"; //固定ファイル名で保存(これがWebLog Expert Liteに渡す用) saveas "access_bak_for_anylyze.log"; //最後尾にカーソル移動 gofileend; //ログ整形終了 //整形したログをWebLog Expert Liteに渡すWSH(VBScript)スクリプト(Analyze.vbs)を起動 run "CMD.EXE /c cscript.exe " + ""C:\hoge\Analyze.vbs"";
WSH(VBScript)スクリプトによるWebLog Expert Liteの制御
コマンドライン引数での制御ができないソフトなので、
WSHスクリプトでウィンドウに対してキーボード押下メッセージを送信することで制御します。
(このソフトの解析開始ショートカットはAlt, F, Aキー押下です。)
キーボード押下メッセージはアクティブウィンドウに対して行われるため、
事前にAppActivateメソッドによりウィンドウをアクティブにしておきます。
Analyze.vbs
'WebLog Expert Liteを起動 Set objShell = WScript.CreateObject("WScript.Shell") Set objExec = objShell.Exec("C:hogeWebLog Expert LiteWLELite.exe") 'WebLog Expertのウィンドウ出現待ち Do Until objShell.AppActivate(objExec.ProcessID) WScript.Sleep 1000 Loop '解析開始 'キーボードショートカット押下メッセージ送信(Alt, F, A) WScript.Sleep 100 '調整(早過ぎると空振りする?) objShell.SendKeys "%" 'Alt objShell.SendKeys "f" 'f objShell.SendKeys "a" 'a 'WebLog Expert Liteが解析結果HTMLをブラウザに渡す 'そのブラウザの起動を待つ 'ウィンドウタイトルとして"c-loft.com解析のレポート"をもつウィンドウ出現待ち Do Until objShell.AppActivate("c-loft.com解析のレポート") WScript.Sleep 1000 Loop 'WebLog Expert Liteを終了 objExec.Terminate