#!/bin/sh #------------------------------------------------------------------- # Create Information # NAME : k-square # DESCRIPTION : Log shower # HISTORY : 2002/10/30 Create #------------------------------------------------------------------- # BCABのアクセスログの保存先を指定する LOGDIR=/log/hogehoge/accesslog; export LOGDIR ############################################################################ # メインルーチンのシェル関数。 # ログファイルを引数にとって、ログをわかりやすく表示する。 ############################################################################ showlog () { nkf -J -ed "$@" | awk -F ',' ' BEGIN{ # ヘッダ定義の出力 printf( "#アクセス時刻,処理時間[ms],利用者ID,利用者氏名,利用者所属,利用者職位,操作対象クラスID,操作内容,操作対象,上位キャビネットの名称\n"); } { # $5 をコードから文字列へ変換 if( $5 == "1" ) $5 = "サーバ"; else if( $5 == "2" ) $5 = "サービス"; else if( $5 == "3" ) $5 = "オーナー"; else if( $5 == "10" ) $5 = "キャビネット"; else if( $5 == "11" ) $5 = "フォルダ"; else if( $5 == "12" ) $5 = "文書"; else if( $5 == "13" ) $5 = "ショートカット"; else if( $5 == "20" ) $5 = "ビジネススペース"; else if( $5 == "21" ) $5 = "セクション"; else if( $5 == "22" ) $5 = "リンク"; else if( $5 == "23" ) $5 = "テンプレートフォルダ"; # $6 をコードから文字列へ変換 if( $6 == "1" ) $6 = "登録"; else if( $6 == "2" ) $6 = "参照"; else if( $6 == "3" ) $6 = "更新"; else if( $6 == "4" ) $6 = "削除"; else if( $6 == "5" ) $6 = "移動"; else if( $6 == "6" ) $6 = "コピー"; else if( $6 == "7" ) $6 = "直下・配下の一覧参照"; else if( $6 == "8" ) $6 = "上位の一覧参照"; else if( $6 == "9" ) $6 = "検索"; else if( $6 == "10" ) $6 = "アクセス権登録・更新"; else if( $6 == "11" ) $6 = "アクセス権参照"; else if( $6 == "12" ) $6 = "アクセス権削除"; else if( $6 == "13" ) $6 = "文書本体の追加"; else if( $6 == "14" ) $6 = "文書本体の置換"; else if( $6 == "15" ) $6 = "文書本体の削除"; else if( $6 == "16" ) $6 = "文書本体の参照"; else if( $6 == "17" ) $6 = "論理ロックの設定"; else if( $6 == "18" ) $6 = "論理ロックの解除"; else if( $6 == "19" ) $6 = "論理ロックのチェック"; # 時刻値の出力 printf( "%.2f,%10.3f[ms]," , $13 / 100000000 , ($14 - $13) / 1000 ); # 利用者の出力 ( $11,$12,$9,$10 ID 利用者 所属 職位 ) sub( /^113414/ , "" , $11 ); printf( "%s,%s,%s,%s," , $11 , $12 , $9 , $10 ); # 利用ファイル情報の出力 ($5,$6,$22,$29 捜査対象クラスID 操作内容 名称 上位キャビネットの名称) printf( "%s,%s,%s,%s\n" , $5 , $6 , $22 , $29 ); }' } ############################################################################ # メインルーチン部分以外の、エラーチェックなどの処理。 ############################################################################ # 引数がなければ当日のログを表示 if [ $# -eq 0 ] then # ファイルがないのはおかしいのでエラー出して終了 # 引数の関係上、チェックするのは必ずあるファイルひとつのみ if [ ! -f "${LOGDIR}/`date +%Y%m%d`".acclog ] then echo "ERROR! : Log File does not exist." >&2 echo "Exit" >&2 exit fi showlog "${LOGDIR}/`date +%Y%m%d`"*.acclog # 引数がひとつ以上なら else for i in "$@" do # ファイルがないのはおかしいのでエラー出して次のファイルへ。 if [ ! -f "${LOGDIR}/$i".acclog ] then echo "ERROR! : Log File does not exist." >&2 echo "Ignore \"${LOGDIR}/${i}*.acclog\"" >&2 continue fi showlog "${LOGDIR}/$i"*.acclog done fi #------------------------------------------ 以下参考 ------------------------------------------ ############################################################################ # 共通部分の定義 ############################################################################ #01 データタイプ AL:固定 #02 バージョン 1:アクセスログのバージョン #03 スレッドID #04 サービスID BCAB or BSPACE #05 クラスID 操作対象オブジェクトのクラスID #06 機能ID 操作の内容 #07 未使用 #08 本務オフィスID #09 本務オフィス名 #10 職位名 #11 利用者ID #12 利用者名 #13 コマンド開始時間 ⇒例(20021028000527955856) #14 コマンド終了時間 ⇒2002年10月28日00時05分27秒955ミリ秒856 #15 クライアント種別 #16 予備 #17 予備 #18 予備 #19 予備 #20 IDパス 操作対象オブジェクトのIDパス #21 InstanceID 操作対象オブジェクトのInstanceID #22 ノード名称 操作対象オブジェクトの名前 #23 移動/コピー元IDパス 移動/コピーの時は移動/コピー元のIDパス #24 移動/コピー元InstanceID 移動/コピーの時は移動/コピー元のInstanceID #25 予備 #26 予備 #27 予備 #28 予備 ############################################################################ # 共通部分のフィールド 05 の数値の定義 ############################################################################ #01 サーバ #02 サービス #03 オーナー #10 キャビネット #11 フォルダ #12 文書 #13 ショートカット #20 ビジネススペース #21 セクション #22 リンク #23 テンプレートフォルダ ############################################################################ # 共通部分のフィールド 06 の数値の定義 ############################################################################ #01 登録 #02 参照 #03 更新 #04 削除 #05 移動 #06 コピー #07 (直下、配下)一覧参照 #08 (上位)一覧参照 #09 検索 #10 アクセス権登録、更新 #11 アクセス権参照 #12 アクセス権削除 #13 文書本体の追加 #14 文書本体の置換 #15 文書本体の削除 #16 文書本体の参照 #17 論理ロックの設定 #18 論理ロックの解除 #19 論理ロックのチェック