python讀取日誌,篩選關鍵字error

import os
import json
import logging
import re

name = '日誌文件名'
path = '日誌路徑'
# 拼接要過濾日誌文件的路徑
file_path = os.path.join(path, name)
# 拼接要輸出日誌文件的路徑
LogPath = os.path.join(path, "輸出日誌名")
# 日誌輸出等級(DEBUG,INFO,ERROR...)如果需要修改日誌格式,加format='%(message)s'就可以改成沒有info:root
logging.basicConfig(filename=LogPath, level=logging.DEBUG) 
# 清空日誌文件內容
file = open(LogPath, 'w').close()

# 輸入json格式自定義類型
class Employee(object):
    def __init__(self, SYS_NO, O_TIME, ACTION, LOG_TYPE, RESULT, SPENT_TIME, ERROR_MSG):
        self.SYS_NO = SYS_NO
        self.O_TIME = O_TIME
        self.ACTION = ACTION
        self.LOG_TYPE = LOG_TYPE
        self.RESULT = RESULT
        self.SPENT_TIME = SPENT_TIME
        self.ERROR_MSG = ERROR_MSG

    def obj_json(self, obj_instance):
        return {
            'SYS_NO': obj_instance.SYS_NO,
            'O_TIME': obj_instance.O_TIME,
            'ACTION': obj_instance.ACTION,
            'LOG_TYPE': obj_instance.LOG_TYPE,
            'RESULT': obj_instance.RESULT,
            'SPENT_TIME': obj_instance.SPENT_TIME,
            'ERROR_MSG': obj_instance.ERROR_MSG,
        }

# 讀取日誌文件,然後寫入err_log文件
def read_log(url, keyword):
    with open(file_path, 'r+', encoding='utf-8') as f:
        count = 0
        for line in f:   # 如果需要讀取行號數字,改成 for (num,line) in enumerate(f):  這裏就將行號獲取到:num,需要展示的話,在自定義json中加入NUM對應的字段
            if keyword in line:    
                # 輸出日誌切割,多符號切分
                test1 = re.split(',| ', line)
                time = test1[0] + ' ' + test1[1] + ':' + test1[2]
                sy_no = None
                act = None
                log_type = test1[3]
                res = test1[4]
                spent_time = None
                # error_msg = test1[5] + '' +test1[6]+ '' +test1[7]+ '' +test1[8]
                # 判斷字段長度,防止報錯,也可以try...except...
                if len(test1) <= 8:
                    error_msg = os.path.join(test1[5], test1[6], test1[7])
                else:
                    error_msg = os.path.join(test1[5], test1[6], test1[7], test1[8])
                # 調用函數,傳入對應字段
                emp = Employee(sy_no, time, act, log_type, res, spent_time, error_msg)
                # 序列化轉換爲json格式
                data = json.dumps(emp, default=emp.obj_json, ensure_ascii=False)
                print(data)
                # 日誌輸出
                logging.info(data)

            count += line.count(keyword)
    return count


sum = 0
num = read_log(file_path, 'ERROR')
sum += num
print('關鍵字總個數: ' + str(sum))
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章