python - 从静态方法记录

标签 python logging

在一个几乎没有非静态函数的类中,我通常会像这样记录日志:

class ClassA:

    def __init__(self):
        self._logger = logging.getLogger(self.__class__.__name__)

    def do_something(self):
        self._logger.info("Doing something")

    def do_something_else(self):
        self._logger.info("Doing something else.")

在一个有静态方法的类中我一直这样做:

class ClassB:

    _logger = logging.getLogger("ClassB")

    @staticmethod
    def do_something():
        ClassB._logger.info("Doing something")

    @staticmethod
    def do_something_else():
        ClassB._logger.info("Doing something else")

你可以这样做,但它看起来很蹩脚:

class ClassB:

    @staticmethod
    def do_something():
        logger = logging.getLogger("ClassB")
        logger.info("Doing something")

    @staticmethod
    def do_something_else():
        logger = logging.getLogger("ClassB")
        logger.info("Doing something else")

是否有更好的模式从静态方法进行日志记录?

最佳答案

您可以将它们变成类方法。

class ClassB(object):
    _logger = logging.getLogger("ClassB")

    @classmethod
    def do_something(cls):
         cls._logger.info("Doing something")

但请注意,当您从 ClassB 派生并调用 do_something 时,它将获得不同的记录器,因为 cls 表示派生类而不是B 类

关于python - 从静态方法记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8438767/

相关文章:

linux - 保留文件中最后 x 条日志 - Linux

git log over 在使用 --follow 时限制输出?

java - 每个日志级别要包含哪些信息?

python - 如何绘制Keras/Tensorflow子类化API模型?

python - 如何在 python 3.4.4 中一次将相同的转换逻辑应用于多个列

java - eclipse日志中具体数字的含义是什么?

android - 在 Blu R1 HD(亚马逊手机)上启用 DEBUG 日志记录

python - 如何从 discord.py 中的文本 channel 获取所有消息的数组?

python - 使用 for 循环与列表理解来优化代码

python - 添加到 Python 路径目录