python 合并当天tomcat异常日志 第二版

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

把找出的异常文件,归类到指定目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# !/usr/bin/env python
# coding:utf-8
import  os,sys,tempfile,time,datetime,re
import  string
from  smtplib  import  SMTP
from  email  import  MIMEText
from  email  import  Header
from  os.path  import  getsize
from  sys  import  exit
from  re  import  compile , IGNORECASE
now  =  datetime.datetime.now()
strdatetime1  =  now.strftime( "%Y%m%d" )
strdatetime  =  now.strftime( "%Y/%m/%d" )
tomcat_log  =  '/home/logs/'
last_position_logfile  =  '/home/back/test/last_position.txt'
#error_list_logfile = '/home/back/test/error_list.txt'
error_list_logfile1  =  '/home/back/test/error_list'
Date = now.strftime( "%d" )
error_list_logfile  =  error_list_logfile1  +  strdatetime1  +  ".txt"
print  error_list_logfile
errorfile = error_list_logfile
pattern  =  compile (r 'Exception|^\t+\bat\b' , IGNORECASE)
#fp = open(error_list_logfile, "w+")
def  writeToTxt(list_name, file_path):
     try :
         fp  =  open (file_path,  "a+" )
         for  item  in  list_name:
             fp.write( str (item)  +  "\n" )
         fp.close()
     except  IOError:
         print ( "fail to open file" )
 
 
# 分析文件找出异常的行
def  analysis_log( file ):
     #parent_file = os.path.dirname(file)
     error_list  =  []
     try :
         data  =  open ( file 'r' )
     except :
         exit()
     for  line  in  data:
         if  pattern.search(line):
             error_list.append( file )
                         #print error_list
                         #errors_list += 1
                         #print "%s" %file
                         break
         data.close()
         if  len (error_list) = = 1 :
             #return ''.join(error_list)
             writeToTxt(error_list,error_list_logfile)
         #return error_list
         #if errors_list == 1:
             #print "%s num is %d" %(file,errors_list)
     #print ''.join(errors_list)
 
def  walk(local_dir):
     for  root, dirs, files  in  os.walk(local_dir):
         for  filespath  in  files:
             # return filespath
             local_file  =  os.path.join(root, filespath)
             # print error_info2
             error_info  =  analysis_log(local_file)
def  walk_dir(home_dir):
     homedir = []
         for  root, dirs, files  in  os.walk(home_dir):
             for  dirname  in  dirs:
                         local_dir  =  os.path.join(root, dirname)
                         #print "Date is %s" %Date
                         result  =  string.find(local_dir,strdatetime)! = - 1
                         if  result:
                             #print local_dir.count('/')
                             if  local_dir.count( '/' ) = = 8 :
                                 homedir.append(local_dir)
         return  homedir
 
 
 
def  make_ex(errorfile):
     with  open (errorfile) as f:
         exfile  =  []
         exdict  =  {}
         for  in  f.readlines():
             expname  =  i.strip().split( '/' )[ 3 ]
             exname  =  i.strip().split( '/' )[ 8 ]
             # if expname not in exfile:
             #     exfile.append(exname)
             estr  =  i.strip()
             #print estr
             youpattern  =  re. compile ( '/(\w+)/(\w+)/(\w+)' )
             result  =  youpattern.match(estr)
             r1  =  result.group()
             r2  =  "ex/"  +  strdatetime1
             r3  =  exname
             rall  =  [r1, r2, r3]
             # exdict[r1]
             rexall  =  "/" .join(rall)  +  '/'
             #print rexall
             if  not  os.path.exists(rexall):
                 os.makedirs(rexall)
             os.system( 'cp -r %s %s'  %  (estr, rexall))
 
 
def  make_diff_ex(c):
     for  in  c:
         i = str (j)
         expname  =  i.strip().split( '/' )[ 3 ]
         exname  =  i.strip().split( '/' )[ 8 ]
         # if expname not in exfile:
         #     exfile.append(exname)
         estr  =  i.strip()
         #print estr
         youpattern  =  re. compile ( '/(\w+)/(\w+)/(\w+)' )
         result  =  youpattern.match(estr)
         if  result:
             r1  =  result.group()
             r2  =  "ex/"  +  strdatetime1
             r3  =  exname
             rall  =  [r1, r2, r3]
             # exdict[r1]
             rexall  =  "/" .join(rall)  +  '/'
             #print rexall
             if  not  os.path.exists(rexall):
                 os.makedirs(rexall)
             os.system( 'cp -r %s %s'  %  (estr, rexall))
         
 
 
 
 
 
'''
def temps(errorfile):
     tmpfile = tempfile.NamedTemporaryFile(delete=False)
     with open(errorfile,'rw') as f:
         readfile="\n".join(f.readlines)
         tmpfile.write(str(f.readlines()))
         return tmpfile
'''
def  temps(errorfile):
     tmpfile = []
     with  open (errorfile, 'r' ) as f:
         tmpfile.append(f.readlines())
         return  tmpfile
 
 
 
def  list_diff(a, b):
     ret  =  []
     for  in  a:
         if  not  in  b:
             ret.append(i)
     return  ret
 
if  __name__  = =  '__main__' :
     if  not  os.path.exists(errorfile):
         fp  =  open (error_list_logfile,  "w+" )
         tomcat_last_dir  =  walk_dir(tomcat_log)
         for  in  tomcat_last_dir:
             walk(i)
         make_ex(errorfile)
     else :
         a = temps(errorfile)
         fp  =  open (error_list_logfile,  "w+" )
         tomcat_last_dir  =  walk_dir(tomcat_log)
         for  in  tomcat_last_dir:
             walk(i)
         #tmpfiles = []
         b = temps(errorfile)
         c = list_diff(a,b)
         if  c:
             make_diff_ex(c)

本来想用tempfile模块的,还要研究下。




本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1915646,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
测试技术 开发工具 git
写了BUG还想跑——闲鱼异常日志问题自动追踪-定位-分发机制
为了高效地发现、定位和解决预发问题,闲鱼团队研发了一套异常日志问题自动追踪-定位-分发机制。这套机制通过自动化手段,实现了异常日志的定时扫描、精准定位和自动分发,显著降低了开发和测试的成本,提高了问题解决的效率。
140 15
写了BUG还想跑——闲鱼异常日志问题自动追踪-定位-分发机制
|
3月前
|
人工智能 Oracle Java
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
59 2
|
4月前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
4月前
|
JSON 缓存 fastjson
一行日志引发的系统异常
本文记录了一行日志引发的系统异常以及作者解决问题的思路。
102 11
|
5月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
|
6月前
|
安全 Java API
为什么捕获异常后不要使用e.printStackTrace()打印日志
为什么捕获异常后不要使用e.printStackTrace()打印日志
|
6月前
|
运维
系统日志使用问题之如何防止在打印参数时遇到NPE(空指针异常)
系统日志使用问题之如何防止在打印参数时遇到NPE(空指针异常)
|
5月前
|
监控 安全 Linux
在Linux中,如何查看和审计系统日志文件以检测异常活动?
在Linux中,如何查看和审计系统日志文件以检测异常活动?
|
6月前
|
消息中间件 JSON 自然语言处理
python多进程日志以及分布式日志的实现方式
python日志在多进程环境下的问题 python日志模块logging支持多线程,但是在多进程下写入日志文件容易出现下面的问题: PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。 也就是日志文件被占用的情况,原因是多个进程的文件handler对日志文件进行操作产生的。
|
6月前
|
监控
监控治理问题之想规范化异常抛出和日志使用以降低CDO报警噪音,如何解决
监控治理问题之想规范化异常抛出和日志使用以降低CDO报警噪音,如何解决

热门文章

最新文章