项目使用log采用log4cxx并加以封装,生成的文件名格式固定,形如 scenesserver21.log.190930-01 这种格式,即服务器名字加服务器编号,末尾采用年月日 - 时间缩写 进行命名。
每次查询之前产生日志的时候会比较麻烦,需要先查询当前是哪天,然后输入对应文件名。写个脚本将输入时间这部交给程序去做,可以方便不少。
#!/bin/bash
######################################
# 查找一段时间内的日志信息
# 集成 grep "test" ~/log/functionserver.log.190930-01 的处理命令
#
#
# 用法:sh greplog.sh test sc hour
# 参数:分别为待检索字符串、目标服务器、时间
# 其他:目标服务器与时间可省略,默认为sc、hour
# 时间:2019/09/30
######################################
findserverbuild()
{
if [ $# -eq 1 ]
then
argument=$1
else
argument=$1$2
fi
case $server in
fu)
findserver=~/log/functionserver.log.$argument
;;
sc)
findserver=~/log/functionserver.log.$argument
;;
*)
echo "Find server error!!!"
exit 1
esac
}
if [ $# -lt 1 ]
then
echo "Argument too less!!! (eg: ./greplog.sh abc fu hour)"
exit 1
fi
word=$1
server=$2
findtime=$3
if [[ $findtime == "" ]]
then
findtime="hour"
fi
if [[ $server == "" ]]
then
server="sc"
fi
case $findtime in
hour)
timetmp=`date +"%Y%m%d%H"`
timetmp=$(expr $timetmp % 100000000)
timetmp1=$(expr $timetmp / 100)
timetmp2=$(expr $timetmp % 100)
if [[ $timetmp2 -ge 10 ]]
then
findserverbuild $timetmp1 "-"$timetmp2
else
findserverbuild $timetmp1 "-0"$timetmp2
fi
;;
day)
timetmp=`date +"%Y%m%d"`
timetmp=$(expr $timetmp % 1000000) #应该不会有2000年的日志 不处理了
findserverbuild $timetmp "*"
;;
month)
timetmp=`date +"%Y%m"`
timetmp=$(expr $timetmp % 10000)
findserverbuild $timetmp "*"
;;
all)
findserverbuild "*"
;;
*)
echo "Find time error!!!"
exit 1
case
grep -ir --color $1 $findserver
这个脚本的特殊性太高,因为文件名处理全部是按照本项目的log文件名处理的,移植性相当差。不过可以用来练习一下shell脚本基本语法与函数使用。