带薪摸鱼的第四天之logging日志封装

1.logging封装代码:

import logging
import settings


class Logger:
    isirsta = None

    def __init__(self, rootname, file, fmt, encoding, debug):
        self.rootname = rootname
        self.file = file
        self.fmt = fmt
        self.encoding = encoding
        self.debug = debug

    def __new__(cls, *args, **kwargs):
        """
        实现简单的单例模式
        :param args:
        :param kwargs:
        :return:
        """
        if not cls.isirsta:
            cls.isirsta = super().__new__(cls)
            return cls.isirsta
        return cls.isirsta

    def logger_log(self):
        # 调试模式
        if self.debug:
            filelevel = logging.DEBUG
            consolelevel = logging.DEBUG
        else:
            filelevel = logging.WARNING
            consolelevel = logging.INFO

        # 设置等级
        loggers = logging.getLogger(self.rootname)
        loggers.setLevel(logging.DEBUG)

        # 创建日志处理器
        file = logging.FileHandler(filename=self.file, encoding=self.encoding)
        file.setLevel(filelevel)  # 设置写入文件的日志等级

        console = logging.StreamHandler()
        console.setLevel(consolelevel)  # 设置控制台输出日志的等级

        # 3. 创建格式化器
        fmts = logging.Formatter(fmt=self.fmt)

        # 4. 把格式化器添加到日志处理器上
        file.setFormatter(fmts)
        console.setFormatter(fmts)

        # 5. 把日志处理器添加到日志器
        loggers.addHandler(file)
        loggers.addHandler(console)

        return loggers


logger = Logger(**settings.LOGER_DATA).logger_log()

2.settings配置文件配置内容

# 日志
LOGER_DATA = {
    "rootname": "SupTech",
    "file": os.path.join(BASE_PATH, 'logs', 'log.log'),
    "fmt": "%(levelname)s %(asctime)s [%(filename)s-->line:%(lineno)d]:%(message)s",
    "encoding": "utf-8",
    "debug": False,
}

3.log.log日志存储文件

带薪摸鱼的第四天之logging日志封装

  • 手动创建一个logs文件夹,在下面手动创建一个log.log的文件 

3.使用

带薪摸鱼的第四天之logging日志封装

4.解释

  • 日志模块用的比较频繁,几乎所有接口都会用到,因为我们要打印日志实时查看,所以用单例模式,控制实例产生的数量,达到节约资源的目的,不然的话每个接口内都进行实例化logger,会很占资源
  • 调试模式,通过settings里面的实参True和False控制,False为关闭调试模式,打印日志时,只有warning等级的日志才会写入log.log文件,True为打开调试模式,只要执行,所有等级的日志都会写入日志文件
上一篇:(每日一练c语言)链式结构


下一篇:2.O(NlogN)的排序算法