[86.程序调试与测试(6):日志配置的继承] 零基础学python,简单粗暴

概述

  • 在开发中,不同业务模块的日志往往有不同的配置,但大量重复相同的部分,我们可以通过继承的方式来节省代码;
  • 继承的方式很简单,即在指定记录器名称时采用【父日志名.XXX】的形式,即可继承父日志对象的配置;
  • 注意这里的继承不要与面向对象中的继承混为一谈;
import logging
import SubModule

# 全局日志对象和级别
logger = logging.getLogger("main")
logger.setLevel(level=logging.INFO)

# 日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 设置日志处理器
handler = logging.FileHandler("./logs/log5.txt")
console = logging.StreamHandler()
logger.addHandler(handler)
logger.addHandler(console)

# 设置格式和级别
handler.setFormatter(formatter)
console.setFormatter(formatter)
handler.setLevel(logging.INFO)
console.setLevel(logging.INFO)

# 当前模块打印日志
logger.info("from main")

# 执行外部模块的业务逻辑,外部模块中也会打印日志
# 让外部模块的日志对象继承当前模块中名为"main"的日志对象,即可使他们拥有相同的配置
subClass = SubModule.SubClass()
subClass.method()
SubModule.func()

子模块代码:

import logging

# 当前logger对象是main的子对象
# 父对象的配置(级别、处理器、格式等)有效
logger = logging.getLogger("main.sub")

class SubClass:

    def __init__(self):

        # 当前logger对象是sub的子对象,main的孙子对象,能够继承它们的配置信息
        self.logger = logging.getLogger("main.sub.class")
        self.logger.info("__init__")

    def method(self):
        self.logger.info("method")
        self.logger.debug("method")
        self.logger.warning("method")


def func():
    logger.info("func")


注意到子模块中的记录器对象的日志格式和输出级别完全继承了主模块中名为主要的记录器的配置,因为子模块中的记录器对象的名称全部采用了【main.xxx】的命名方式;


版权声明:本文为博主原创文章,未经博主允许不得转载.https://my.csdn.net/pangzhaowen

概述

  • 在开发中,不同业务模块的日志往往有不同的配置,但大量重复相同的部分,我们可以通过继承的方式来节省代码;
  • 继承的方式很简单,即在指定记录器名称时采用【父日志名.XXX】的形式,即可继承父日志对象的配置;
  • 注意这里的继承不要与面向对象中的继承混为一谈;
import logging
import SubModule

# 全局日志对象和级别
logger = logging.getLogger("main")
logger.setLevel(level=logging.INFO)

# 日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 设置日志处理器
handler = logging.FileHandler("./logs/log5.txt")
console = logging.StreamHandler()
logger.addHandler(handler)
logger.addHandler(console)

# 设置格式和级别
handler.setFormatter(formatter)
console.setFormatter(formatter)
handler.setLevel(logging.INFO)
console.setLevel(logging.INFO)

# 当前模块打印日志
logger.info("from main")

# 执行外部模块的业务逻辑,外部模块中也会打印日志
# 让外部模块的日志对象继承当前模块中名为"main"的日志对象,即可使他们拥有相同的配置
subClass = SubModule.SubClass()
subClass.method()
SubModule.func()

子模块代码:

import logging

# 当前logger对象是main的子对象
# 父对象的配置(级别、处理器、格式等)有效
logger = logging.getLogger("main.sub")

class SubClass:

    def __init__(self):

        # 当前logger对象是sub的子对象,main的孙子对象,能够继承它们的配置信息
        self.logger = logging.getLogger("main.sub.class")
        self.logger.info("__init__")

    def method(self):
        self.logger.info("method")
        self.logger.debug("method")
        self.logger.warning("method")


def func():
    logger.info("func")


注意到子模块中的记录器对象的日志格式和输出级别完全继承了主模块中名为主要的记录器的配置,因为子模块中的记录器对象的名称全部采用了【main.xxx】的命名方式;


猜你喜欢

转载自blog.csdn.net/pangzhaowen/article/details/80910315