python-logging

示例:
# 重寫logging模塊
import logging
import os
from logging.handlers import TimedRotatingFileHandler


class Logger:

    file_name = 'test.log'
    backup = 5
    console_out_level = 'WARNING'
    file_out_level = 'DEBUG'
    fmt = logging.Formatter("%(asctime)s-%(name)s-%(levelname)s:%(message)s")
    log_path = "D:\project\learn\log"

    def __init__(self, logger_name='framework'):
        self.logger = logging.getLogger(logger_name)
        logging.root.setLevel(logging.NOTSET)

    def get_logger(self):
        if not self.logger.handlers:
            console_handle = logging.StreamHandler()
            console_handle.setFormatter(self.fmt)
            console_handle.setLevel(self.console_out_level)
            self.logger.addHandler(console_handle)

            file_handle = TimedRotatingFileHandler(
                filename=os.path.join(
                    self.log_path,
                    self.file_name),
                when='D',
                interval=1,
                backupCount=self.backup,
                delay=True,
                encoding='utf-8')
            file_handle.setFormatter(self.fmt)
            file_handle.setLevel(self.file_out_level)
            self.logger.addHandler(file_handle)
        return self.logger

    def debug(self, msg):
        self.logger.debug(msg)

    def info(self, msg):
        self.logger.info(msg)

    def warning(self, msg):
        self.logger.warning(msg)

    def error(self, msg):
        self.logger.error(msg)
# 測試logging
from log import Logger


class log_test:

    def __init__(self):
        log = Logger()
        self.logger = log.get_logger()

    def test(self):

        self.logger.debug("This is a debug message")
        self.logger.info("This is a info message")
        self.logger.warning("This is warning message")
        self.logger.error("This is a error message")


if __name__ == "__main__":
    test = log_test()
    test.test()

重建日誌文件:
  • TimedRotatingFileHandler-- 根據時間重建日誌文件
TimedRotatingFileHandler(filename, when, interval, backup, encoding)
	filename:日誌文件名稱
	when:時間單位,其中S-Seconds/ M-Minutes/ H-Hours/ D-Days/ W-Week day/ midnight-Roll over at midnight
	interval:週期,每個少個時間單位,重建日誌文件
	backup: 備份文件,當前目錄保存日誌文件個數,默認爲0,不進行判斷
	encoding:設置日誌文件編碼格式,可以忽略
  • RotatingFileHandler--基於文件大小切換日誌文件
RotatingFileHandler(filename, maxBytes, backupCount):
	filename: 日誌文件名稱
	maxBytes: 日誌大小
	backupCount:備份文件,當前目錄保存日誌文件個數,默認爲0,不進行判斷

日誌格式:

file_handle.setFormatter(self.fmt)
日誌格式:
	%(asctime)s:記錄日誌產生時間,默認爲:'2018-05-03 20:12:22, 122'
	%(created)f:記錄產生時間,通過time.time()獲取
	%(filename)s:路徑中文件名稱
	%(funcName)s:調用log的函數名
	%(levelname)s:調用日誌級別
	%(levelno)d:日誌產生的行數
	%(module)s:模塊名
	%(msecs)d:毫秒,對應asctime的最後一個值
	%(name)s:logger本身的名字
	%(pathname)s:調用源logger文件的完整路徑
	%(processName)s:進程名
	%(process)d:進程ID
	%(thread)d:線程ID
	%(threadName)s:線程名稱

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