示例代码如下:
import logging
import logging.handlers
from common.doconstant import log_path
from datetime import datetime
import os
from common.doconf import conf
log_level = conf.get('log', 'log_level')
#使用当前时间给日志文件命名
file_name = datetime.now().strftime('%Y-%m-%d') + '.log'
log_file = os.path.join(log_path, file_name)
class MyLog:
def __new__(cls, *args, **kwargs):
# 创建日志收集器对象,名称为mylog
mylog = logging.getLogger('mylog')
# 设置日志收集级别
mylog.setLevel(log_level)
# 创建日志输出渠道,输出到控制台
steam_handler = logging.StreamHandler()
steam_handler.setLevel(log_level)
# 创建日志输出渠道,输入到文件
# 普通日志收集器
# file_handler = logging.FileHandler(log_path, mode='a', encoding='utf8')
# 按文件大小进行轮转的收集器
# file_handler = logging.handlers.RotatingFileHandle(log_file,mode='a',encoding='utf8',maxBytes=1024,backupCount=3)
# 按时间进行轮转的收集器
file_handler = logging.handlers.TimedRotatingFileHandler(log_file, encoding='utf8', when='M', interval=1, backupCount=3)
file_handler.setLevel(log_level)
# 添加两个日志输出渠道绑定到日志收集器中
mylog.addHandler(steam_handler)
mylog.addHandler(file_handler)
# 定义日志输出格式
format = '%(asctime)s-[%(filename)s-->line:%(lineno)d]-%(message)s'
# 定义日志输出的方法
formatter = logging.Formatter(format)
# 将日志的输出格式绑定在输出渠道上
steam_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
return mylog
#创建一个实例,方便其他模块调用
log = MyLog()