Python3 分享自定义Logger实现的一种方式

代码运行的时候会将每一个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")

借鉴于Python 中更优雅的日志记录方案

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值