改进工作流程_日志截取器

记得刚进公司的时候,我主要从事web方面的工作,查看日志非常重要,我们的系统打印出日志文件格式如下:

(由于公司保密原则,其中隐去一些重要的信息)

%%%%%% <一些特殊的标识A> | <一些特殊的标识B> | <一些有意义的信息> | <一些有意义的信息> | <一些重要的信息如此条sql的执行时间> %%%%%%%

SELECT  staff_name FROM staff

 

因为在同一时间,会有很多员工操作我们的系统,此时日志文件会产生大量的信息,我们想捕获与自己操作相关的日志信息就成为了一个问题,

在此之前想要解决此问题主要靠两方面:

1、使用tail -f sql.log ,crt客户端刷屏后,快速的执行你的操作,然后切屏后ctrl+c,此时就是希望在自己执行的同时别人没有操作系统。

2、根据自己的经验和知识,执行你的操作后,ctrl+c,找到属于自己本次操作的日志。

很明显这两种方法都存在问题。

当时我想,是不是有什么方法可以代替这个tail -f sql.log 操作,让每个用户只看到自己的sql日志信息。

假设:<一些特殊的标识A>是客户端的ip地址,然后我想到是否可以根据此标识截取与用户自己相关的信息,最终我选择使用shell脚本,对tail 命令进行加工,具体如下:

v_date="sqllog.20"

v_year=`date +%y`

v_month=`date +%m`

v_day=`date +%d`

v_middle="-"

v_postfix=".log"

v_filename=$v_date$v_year$v_middle$v_month$v_middle$v_day$v_postfix

 

v_ipaddress=`who am i -a| awk '{print $8}'`

 

if [ -d fileneirong_temp ]

then 

    :

else

`mkdir fileneirong_temp`

fi

 

if [ -f fileneirong_temp/$v_ipaddress ]

then 

    :

else

`touch fileneirong_temp/$v_ipaddress`

fi

 

size_old=`wc -l $v_filename|awk  '{print $1 }'`

while [ 1==1 ]; do

size_new=`wc -l $v_filename|awk  '{print $1 }'`

if [ $size_new -gt $size_old ] 

then

   size=$(($size_new - $size_old))

`tail -n $size  $v_filename | perl -pi -e 's//*/%/g'  >fileneirong_temp/$v_ipaddress`

v_temp=""

v_temp_1=""

v_temp_2="1"

v_temp_3="i"

while read LINE

      do

          v_temp=`echo $LINE | grep '[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}' `

           if [ -n v_temp ] && [ "$v_temp" != "" ] || [ "$v_temp_2" != "" ]

      then

                   v_temp_1=`echo $LINE | grep "$v_ipaddress" `

                   if [ -n v_temp_1 ] && [ "$v_temp_1" != "" ] &&  [ "$v_temp_3" != "" ]

                      then

                         echo $LINE

                        #  echo $line_temp

                         v_temp_2=""

                         v_temp_3="ii"

                      else

                         v_temp_2="i" 

                   fi 

          else 

                          echo $LINE

           fi

   done < fileneirong_temp/$v_ipaddress

fi

size_old=$size_new

done

`rm -f fileneirong_temp/$v_ipaddress`

exit 0

(这是我第一次写shell脚本,可能有很大的改进空间,欢迎大家指正)

一般情况下,此脚本都是可以执行的,唯一可能经常要修改的就是:

v_ipaddress=`who am i -a| awk '{print $8}'`

此处可能要根据主机操作系统的不同,改变此v_ipaddress变量的获取方法,我当时的想法是此标识由用户自己输入,

在我发出这个脚本后,我的一个同事提到了可以客户端自己来进行获取,这是我刚进公司1个月的时候写的脚本,现在已经工作近两年了,记得当时科长还表扬了,现在回忆起来心里蛮开心的。

特此与大家分享一下,没有什么技术含量,主要是分享一下心得。工作中一定不能埋头苦干,要思考,要学会利用自己已经掌握的知识来解决当前遇到的问题。同时在解决问题的时候一定要把握度,因为我也在这个日志截取器(就这么叫这个shell脚本了)上犯了个错误,我当时想进一步扩展,直接使用java+flex,使用java来执行此shell脚本,然后把shell脚本的执行结果返回给java,然后java再返回给flex前端,最终虽然实现了,但是确实没有什么价值,不如大家在crt中使用这个shell脚本方便。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值