在Python3中使用logging输出到日志文件和控制台,日志文件并以每天一个创建。
log.py
import logging
import os
from logging import handlers
class Logger(object):
# 日志级别关系映射
level_relations = {
'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
}
def __init__(self,
filename,
level='info',
when='D',
back_count=3,
fmt='%(asctime)s - [line:%(lineno)d] - %(levelname)s: %(message)s'):
f_dir, f_name = os.path.split(filename)
os.makedirs(f_dir, exist_ok=True) # 当前目录新建log文件夹
self.logger = logging.getLogger(filename)
format_str = logging.Formatter(fmt) # 设置日志格式
self.logger.setLevel(self.level_relations.get(level)) # 设置日志级别
sh = logging.StreamHandler() # 控制台输出
sh.setFormatter(format_str) # 设置屏幕上显示的格式
# backupCount为文件夹下保留的日志文件个数,超过后就会删除最先创建的日志文件
# when=D表示日至文件按每天分隔
# 输出到日志文件
th = handlers.TimedRotatingFileHandler(filename=filename, when=when, backupCount=back_count,
encoding='utf-8')
th.setFormatter(format_str) # 设置文件里写入的格式
self.logger.addHandler(sh) # 把对象加到logger里
self.logger.addHandler(th)
其他py文件调用,和log.py同目录
import log
loginfo = log.Logger(filename='./logs/log.log', level='debug',when='D',back_count=10).logger
if __name__ == "__main__":
# 主函数
loginfo.debug("")
loginfo.info("")
loginfo.warning("")
loginfo.error("")
纯属分享,我也是网上找的轮子,记录一下