从静态方法记录

Mat*_*und 10 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.")
Run Code Online (Sandbox Code Playgroud)

在使用静态方法的类中,我一直这样做:

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")
Run Code Online (Sandbox Code Playgroud)

你可以这样做,但似乎很蹩脚:

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")
Run Code Online (Sandbox Code Playgroud)

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

Fre*_*Foo 6

您可以将它们转换为类方法.

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

    @classmethod
    def do_something(cls):
         cls._logger.info("Doing something")
Run Code Online (Sandbox Code Playgroud)

但是请注意,当你派生ClassB并调用时do_something,它会得到一个不同的记录器,因为它cls表示派生类而不是ClassB.