一個簡單的日誌封裝類

記錄一個自己封裝的日誌類,不完善的地方,望指點。

其中,包含寫文件和輸出到終點,定義日誌等級,定義日誌存儲文件時間間隔,日誌文件個數等

並統一日誌輸出格式:文件名,方法名等信息


import logging
from logging import handlers


class Logger(object):
    level_relations = {
        'debug': logging.DEBUG,
        'info': logging.INFO,
        'warning': logging.WARNING,
        'error': logging.ERROR,
        'crit': logging.CRITICAL
    }  # 日誌級別關係映射

    def __init__(self, filename, level='debug', when='D', backCount=90,
                 fmt='%(levelname)s: %(message)s; %(funcName)s() - %(pathname)s[line:%(lineno)d] - %(asctime)s'):
        self.logger = logging.getLogger(filename)
        format_str = logging.Formatter(fmt)  # 設置日誌格式
        self.logger.setLevel(self.level_relations.get(level))  # 設置日誌級別

        self.sh = logging.StreamHandler()  # 往屏幕上輸出
        self.sh.setFormatter(format_str)  # 設置屏幕上顯示的格式
        self.logger.addHandler(self.sh)  # 把對象加到logger裏

        self.th = handlers.TimedRotatingFileHandler(filename=filename, when=when, backupCount=backCount,
                                                    encoding='utf-8')  # 往文件裏寫入#指定間隔時間自動生成文件的處理器
        # 實例化TimedRotatingFileHandler
        # interval是時間間隔,backupCount是備份文件的個數,如果超過這個個數,就會自動刪除,when是間隔的時間單位,單位有以下幾種:
        # S 秒
        # M 分
        # H 小時、
        # D 天、
        # W 每星期(interval==0時代表星期一)
        # midnight 每天凌晨
        self.th.setFormatter(format_str)  # 設置文件裏寫入的格式
        self.logger.addHandler(self.th)

    def release(self):
        try:
            self.logger.removeHandler(self.sh)
            self.logger.removeHandler(self.th)
        except Exception as e:
            print('log Handler remove:', e)

    # def __del__(self):
    #     self.release()

 

 

 

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