代码的引用来源这里我修改了一点,
详细参考传送门
这篇博客的目的主要是注意在多个文件调用的时候调用的一种方法,
以下为日志的输出,通过 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 测试")