日志查找到第一个关键字后反向查找第二个关键字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日志查找到第一个关键字后反向查找第二个关键字相关的知识,希望对你有一定的参考价值。
用户的一个需求
catalina.out的日志中,先找到第一个关键字,然后向上查找第二个关键字,写个小脚本
1 #!/usr/bin/python 2 3 import datetime, time 4 import re 5 import os 6 7 #取得文件名,文件名的时间格式是收到报警的时间减去一小时 8 def get_filename(input_str): 9 #如果有输入,整理格式后减去一小时 10 if input_str: 11 t=datetime.datetime.strptime(input_str, "%Y%m%d%H") + datetime.timedelta(hours=-1) 12 #如果无输入,则默认为现在时间再减去一小时 13 else: 14 t=datetime.datetime.now() + datetime.timedelta(hours=-1) 15 #组合成文件名 16 f_name="/app/tomcat/logs/catalina."+t.strftime("%Y-%m-%d-%H")+".out" 17 return f_name 18 19 #取得第一个关键字的行数 20 def get_line(f_name): 21 with open(f_name, ‘r‘) as fread: 22 lines = fread.readlines() 23 i=0 24 l_num=[] 25 for line in lines: 26 #第一个关键字 27 keyword1="Could not connect to SMTP host" 28 rs1 = re.search(keyword1, line) 29 i+=1 30 if rs1: 31 #第一个关键字的行号 32 l_num.append(i) 33 return l_num 34 35 #根据第一个关键字的行数向上查找到第二个关键字 36 def get_log(f_name, num): 37 with open(f_name, ‘r‘) as fread: 38 #把文件倒过来,从第一个关键字所在的行开始查找 39 rlines = fread.readlines()[::-1] 40 j=0 41 rs_str=[] 42 for j in range(len(rlines)-num,len(rlines)): 43 #第二个关键字的正则表达式 44 keyword2="U000\d{4},.*@.*,.\d{2}" 45 rs2 = re.search(keyword2, rlines[j]) 46 j+=1 47 if rs2: 48 #第二个关键字的内容,J由于上面+1了,所以要-1 49 rs_str.append(rlines[j-1]) 50 break 51 return rs_str 52 53 def main(): 54 #打印说明文字 55 print "Please input alerttime, YYYYMMDDHH exp:2017010113" 56 print "Enter for default (now)" 57 #要求输入 58 input_str = raw_input("input: ") 59 #取得文件名 60 f_name = get_filename(input_str) 61 #判断文件是否存在 62 if os.path.isfile(f_name): 63 l_num = get_line(f_name) 64 if l_num: 65 for num in l_num: 66 rs_str=get_log(f_name, num) 67 if rs_str: 68 #找到日志时的输出 69 print "-----------------" 70 print rs_str[0] 71 print "javax.mail.MessagingException: Could not connect to SMTP host: smtp.partner.outlook.cn, port: 587;" 72 print "-----------------" 73 #未找到相关日志时的输出 74 else: 75 print "-----------------" 76 print "No Log Found" 77 print "-----------------" 78 #文件不存在时的输出 79 else: 80 print "-----------------" 81 print "File not exist, please check again" 82 print "-----------------" 83 84 if __name__ == ‘__main__‘: 85 main()
输出为
[[email protected] logs]# ./findlog.py Please input alerttime, YYYYMMDDHH exp:2017010113 Enter for default (now) input: 2017083116 ----------------- 2017-08-31 15:00:16,070 DEBUG [java.sql.ResultSet] - {rset-187333} Result: [U0000448, [email protected], ??Buyer, 00] javax.mail.MessagingException: Could not connect to SMTP host: smtp.partner.outlook.cn, port: 587; ----------------- ----------------- 2017-08-31 15:38:15,980 DEBUG [java.sql.ResultSet] - {rset-187333} Result: [U0000449, [email protected], ??Buyer, 00] javax.mail.MessagingException: Could not connect to SMTP host: smtp.partner.outlook.cn, port: 587; -----------------
以上是关于日志查找到第一个关键字后反向查找第二个关键字的主要内容,如果未能解决你的问题,请参考以下文章