把找出的异常文件,归类到指定目录
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
i
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
j
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
i
in
a:
if
i
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
i
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
i
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,如需转载请自行联系原作者