代码运行的时候会将每一个py文件的log打印出来,利于排错,此封装在每个py中调用getLogger传入__name__即可
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/5/10 10:40
# @Author : YanMingHao
# @Site :
# @File : Logger.py
# @Software: PyCharm
# @notice : 致亲爱的未来的我自己,请原谅我,我有着难以表达的歉意.
import logging, sys
from os import makedirs
from os.path import dirname, exists
LOG_TO_CONSOLE = True # 是否输出到控制台
LOG_TO_FILE = True # 是否输出到文件
LOG_DATE = '%Y-%m-%d %H:%M:%S'
LOG_FORMAT = "%(asctime)s %(module)s %(lineno)d %(levelname)s %(message)s"
loggers = {}
def getLogger(name=None, level=None):
"""
* 根据名字获取Logger
:return:
"""
global loggers
if not name:
name = __name__
if not level:
level = logging.DEBUG
if loggers.get(name):
return loggers.get(name)
# 换成自己的项目目录
path = f"../log/{name.split('.')[-1]}.log"
logger = logging.getLogger(name)
logger.setLevel(level)
if LOG_TO_CONSOLE:
# 屏幕打印
stream_handler = logging.StreamHandler(sys.stdout)
# 设置logger等级
stream_handler.setLevel(level)
# 构造logger格式
formatter = logging.Formatter(LOG_FORMAT, LOG_DATE)
# 应用logger格式
stream_handler.setFormatter(formatter)
# 添加到logger记录器集合
logger.addHandler(stream_handler)
if LOG_TO_FILE:
# 文件输出
log_dir = dirname(path)
# 路径文件不存在则创建
if not exists(log_dir):
makedirs(log_dir)
# 设置logger路径
file_handler = logging.FileHandler(path, encoding="utf-8")
# 设置logger等级
file_handler.setLevel(level)
# 构造logger格式
formatter = logging.Formatter(LOG_FORMAT, LOG_DATE)
# 应用logger格式
file_handler.setFormatter(fmt=formatter)
# 添加到logger记录器集合
logger.addHandler(file_handler)
loggers.setdefault(name, logger)
return logger
if __name__ == '__main__':
log = getLogger("utils.test")
log.debug("this is a log")