webtet 发表于 2018-12-7 09:58:33

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

  把找出的异常文件,归类到指定目录
# !/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('/')
            exname = i.strip().split('/')
            # 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 =
            # exdict
            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('/')
      exname = i.strip().split('/')
      # 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 =
            # exdict
            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模块的,还要研究下。



页: [1]
查看完整版本: python 合并当天tomcat异常日志 第二版