# 重寫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:線程名稱