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日志并进行多维度分析。
相关文章
|
29天前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录
|
1月前
|
测试技术 开发者 Python
对于Python中的异常要如何处理,raise关键字你真的了解吗?一篇文章带你从头了解
`raise`关键字在Python中用于显式引发异常,允许开发者在检测到错误条件时中断程序流程,并通过异常处理机制(如try-except块)接管控制。`raise`后可跟异常类型、异常对象及错误信息,适用于验证输入、处理错误、自定义异常、重新引发异常及测试等场景。例如,`raise ValueError("Invalid input")`用于验证输入数据,若不符合预期则引发异常,确保数据准确并提供清晰错误信息。此外,通过自定义异常类,可以针对特定错误情况提供更具体的信息,增强代码的健壮性和可维护性。
|
1月前
|
Python
在Python中,`try...except`语句用于捕获和处理程序运行时的异常
在Python中,`try...except`语句用于捕获和处理程序运行时的异常
48 5
|
1月前
|
Python
在Python中,自定义函数可以抛出自定义异常
在Python中,自定义函数可以抛出自定义异常
46 5
|
1月前
|
存储 开发者 Python
自定义Python的异常
自定义Python的异常
18 5
|
2月前
|
存储 索引 Python
|
2月前
|
Python
python读写操作excel日志
主要是读写操作,创建表格
68 2
|
2月前
|
Python
Python生成器、装饰器、异常
【10月更文挑战第15天】
|
2月前
|
Python Windows
python知识点100篇系列(24)- 简单强大的日志记录器loguru
【10月更文挑战第11天】Loguru 是一个功能强大的日志记录库,支持日志滚动、压缩、定时删除、高亮和告警等功能。安装简单,使用方便,可通过 `pip install loguru` 快速安装。支持将日志输出到终端或文件,并提供丰富的配置选项,如按时间或大小滚动日志、压缩日志文件等。还支持与邮件通知模块结合,实现邮件告警功能。
python知识点100篇系列(24)- 简单强大的日志记录器loguru
|
1月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
341 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板