apacheのアクセスログなんかは放っておくと大量のレコードが登録されている。
さすがにそんなログは見たくないので1日分のログを抽出できるようにしてみた。
ついでにいろんなログファイルを処理してみた。
#logrotate?何それおいしいの?(爆
コードはこれ:
#!/bin/bash PATH=/bin LOGROOT=/var/log #DUMPROOT=/root/log APACHE=$LOGROOT/httpd/ DUMPROOT=$APACHE TEMP=/tmp TODAY=`date +%F` # Apache log cat $APACHE/access_log | sed s/^192.168.0.*$n//g | sed s/^127.0.0.1.*$n//g > $TMP/access_log cp $TMP/access_log $DUMPROOT/access_log_$TODAY cat /dev/null > $APACHE/access_log cp $APACHE/error_log $DUMPROOT/error_log_$TODAY cat /dev/null > $APACHE/error_log # others DUMPROOT=$LOGROOT/dump mkdir $DUMPROOT 2>/dev/null LIST="messages cron boot.log mysqld.log secure yum.log" for f in $LIST do cp $LOGROOT/$f $DUMPROOT/${f}_${TODAY} cat /dev/null > $LOGROOT/$f done # cups CUPS=$LOGROOT/cups DUMPROOT=$CUPS LIST="access_log error_log page_log" for f in $LIST do cp $CUPS/$f $DUMPROOT/${f}_${TODAY} cat /dev/null > $CUPS/$f done |
ログファイルを「ファイル名_yyyy-mm-dd」にコピーして、元のファイルを空にするだけ。
パイプでsedに渡しているのはローカルからのアクセスログを排除する為。
必要に応じてログから除外するIPアドレスを指定してやればおk。
※実際に使用する前に必ず動作確認を行ってください。使ったことでログ消失があっても責任は負えませぬ。