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