码迷,mamicode.com
首页 > 其他好文 > 详细

日志查找到第一个关键字后反向查找第二个关键字

时间:2017-09-05 12:27:35      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:date   bug   输入   开始   格式   用户   return   get   bre   

用户的一个需求

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()

输出为

[root@test 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, test-test1@test.com, ??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, test-test2@test.com, ??Buyer, 00]

javax.mail.MessagingException: Could not connect to SMTP host: smtp.partner.outlook.cn, port: 587;
-----------------

  

日志查找到第一个关键字后反向查找第二个关键字

标签:date   bug   输入   开始   格式   用户   return   get   bre   

原文地址:http://www.cnblogs.com/justbio/p/7477904.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!