示例:
# 重写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:线程名称