python logging 模块的一种封装

代码的引用来源这里我修改了一点,
详细参考传送门
这篇博客的目的主要是注意在多个文件调用的时候调用的一种方法,
以下为日志的输出,通过 cs1.py 文件调用 _panda_logging_init.py 中初始化的 logger_panda 句柄得到,注意下图使用的文件的使用结构
在这里插入图片描述

1.
继承logging 进行二次封装

import logging


class MyLogging(logging.Logger):
    def __init__(self, name, level=logging.INFO, file=None, hint_show=True):
        """

        :param name: 日志名字
        :param level: 级别
        :param file: 日志文件名称
        :param hint_show: 日志控制台提示(默认为True 自动开启)
        """
        # 继承logging模块中的Logger类,因为里面实现了各种各样的方法,很全面,但是初始化很简单
        # 所以我们需要继承后把初始化再优化下,变成自己想要的。
        super().__init__(name, level)

        # 设置日志格式
        # fmt = "%(asctime)s %(name)s +'线程ID:'+%(threadName)s %(filename)s--%(lineno)行 :%(message)s"
        # fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s--%(lineno)dline :%(message)s"
        fmt = "%(asctime)s %(name)s 线程:%(threadName)s 执行程序名:%(filename)s--%(lineno)d行 :%(message)s"

        # %(levelno)s:打印日志级别的数值
        # %(levelname)s:打印日志级别的名称
        # %(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
        # %(filename)s:打印当前执行程序名
        # %(funcName)s:打印日志的当前函数
        # %(lineno)d:打印日志的当前行号
        # %(asctime)s:打印日志的时间
        # %(thread)d:打印线程ID
        # %(threadName)s:打印线程名称
        # %(process)d:打印进程ID
        # %(message)s:打印日志信息


        formatter = logging.Formatter(fmt)

        # 文件输出渠道
        if file:
            handle2 = logging.FileHandler(file, encoding="utf-8")
            handle2.baseFilename = file
            handle2.setFormatter(formatter)
            self.addHandler(handle2)

            # 控制台渠道
            if hint_show:
                handle1 = logging.StreamHandler()
                handle1.setFormatter(formatter)
                self.addHandler(handle1)


if __name__ == '__main__':
    mlogger = MyLogging("日志模块测试",level = logging.DEBUG,file="Log/日志模块测试.log")
    mlogger.info("封装好的日志类,info")
    mlogger.debug("封装好的日志类 debug ")
    mlogger.warning("封装好的日志类 warning")




2.
_panda_logging_init.py中初始化参数

from Inspection_Robot.robot_log import *

logger_motor = MyLogging("关节电机",level = logging.DEBUG,file="关节电机.log")

3.
cs1.py中进行调用

from _panda_logging_init import logger_panda

logger_panda.info("测距仪info日志21 测试")
logger_panda.debug("测距仪debug日志22 测试")

おすすめ

転載: blog.csdn.net/weixin_43134049/article/details/121267561
おすすめ