shell查询error日志,高效版

5 篇文章 0 订阅
3 篇文章 0 订阅

之前写过shell查询某时间段的error日志脚本

对于较长的log,之前的shell脚本查询效率较低(因为循环了log的每一行来做查询)

下面是高效版的shell查询error日志

#!/bin/sh

select_dir=$1
input_time=$2
if [[ "${input_time}" =~ 'd' ]]; then
    se_time="$(echo "${input_time}" | grep -Po "[0-9]+") days"
elif [[ "${input_time}" =~ 'h' ]]; then
    se_time="$(echo "${input_time}" | grep -Po "[0-9]+") hours"
elif [[ "${input_time}" =~ 'm' ]]; then
    se_time="$(echo "${input_time}" | grep -Po "[0-9]+") minutes"
fi
sed -i '1,$d' error.log
time_format='[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}'
now_date=`date "+%Y-%m-%d %H:%M:%S"`
find_date=`date -d "${se_time} ago" "+%Y-%m-%d %H:%M:%S"`
#find_date=`date -d "20 days ago" "+%Y-%m-%d %H:%M:%S"`
echo "find time is ${find_date}"
for log in `find ./${select_dir} -name '*.log'`; do
    echo ${log}
    echo ${log} >> error.log
    error_data=$(cat ${log} | grep -C 20 -E "ERROR|Error")
    error_line=$(echo "${error_data}" | grep -E "ERROR|Error" | head -1)
   # echo ${error_line}
    time=$(echo "${error_line}" | grep -Po "${time_format}")
   # echo ${time}
    if [[ "${time}" > "${find_date}" ]] && [[ "${time}" < "${now_date}" ]]; then 
        echo "${error_data}" >> error.log
    fi
    echo ' ' >> error.log
done
echo 'end'

使用说明,参见之前的博客

https://blog.csdn.net/Misaki_root/article/details/92630954

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值