根據指定規則檢查日誌--python

指定規則:
對於日誌A,日誌A天天會增長一次內容,內容格式以下:
start time is:2013-02-06 09:00:00 X行
#中間可能有內容#
end time is:2013-02-06 09:02:32 Y行
若是在X行和Y行之間有內容,則須要將中間包含的內容發郵件給指定人員 python

實現:
首先須要說明一點,如下代碼只是產生郵件文件而且上傳到指定服務器,發送郵件的功能由指定服務器進行統一處理。在處理的過程當中文件都是以二進制模式打開,不涉及編碼的轉換,能夠避免各類編碼形成的問題,只有在確實須要進行文字匹配以前進行解碼。郵件文件使用命名的臨時文件。 服務器

#! /usr/local/bin/python3
import enviroment as eo
import datetime
import re
def check_logs(logpath):
    date_format='%Y-%m-%d'
    now_format=datetime.datetime.today().strftime(date_format)
    re_begin=re.compile('start time is:'+now_format)
    re_end=re.compile('end time is:'+now_format)
    examine_tag=0
    with open(logpath,'rb') as file_name:
        line=file_name.readline()
        while line:
            line=line.decode('gb2312')
            if re_begin.search(line):
                examine_tag=1
                pos=file_name.tell()
                line=file_name.readline()
                continue
            if examine_tag==1:
                if re_end.search(line):
                    return
                else:
                    break
            line=file_name.readline()
        if pos:
            file_name.seek(pos)
            warn_content=file_name.read()
            eo.send_mail_X('',warn_content)

if __name__=='__main__' :
    logpath=''
    check_logs(logpath)
enviroment.py中包括如下幾個相關函數。
def send_mail_X(mailname,mailcontent):
    receivers=[]
    gen_mail(receivers,mailname,mailcontent)
def gen_mail(receivers,mailtag,mailname,mailcontent):
    data_tag=datetime.datetime.today().strftime('%Y-%m-%d')
    with tempfile.NamedTemporaryFile(prefix=mailtag+'.',suffix='.mail') as temp_file:
        temp_file.write(('Subject: '+mailtag+''+mailname+' '+data_tag+'\n').encode())
        temp_file.write(('From:'+mailtag+'<郵件地址>'+'\n').encode())
        for receiver in receivers:
            temp_file.write(('Cc:'+receiver+'\n').encode())
        temp_file.write(mailcontent)
        temp_file.seek(0)
        upload_file_fromtemp(temp_file)
def upload_file_fromtemp(temp_file):
    ftp=FTP()
    ftp.connect('',21)
    ftp.login('','')
    filebasename=os.path.basename(temp_file.name)
    ftmcmd='STOR '+filebasename
    ftp.storbinary(ftmcmd,temp_file)
相關文章
相關標籤/搜索