在代码中实现可选的记录器

iTa*_*ayb 8 python logging

我想在函数中实现一个可选的记录器.就像是:

def foo(arg1, arg2, arg3, logger=None):
    logger = logger or (lambda *x: None)

    ...
    self.logger.debug("The connection is lost.")
Run Code Online (Sandbox Code Playgroud)

我想在记录器存在的情况下进行日志记录.否则,记录器的调试将不起作用.

基本上,实现它的简单方法是将每个调试语句嵌套在一个if logger块中,但是当有许多调试语句时它似乎很乱.

小智 9

自Python 2.7以来NullHandler,logging模块中包含无操作:

import logging      
logging.getLogger('foo').addHandler(logging.NullHandler())
Run Code Online (Sandbox Code Playgroud)

请参阅有关为库配置日志记录的文档.

  • 不需要先删除任何现有的处理程序吗? (5认同)

iTa*_*ayb 8

几个选项:

创建一个虚拟记录器(我最喜欢的):

logger = logger or logging.getLogger('dummy') #  without configuring dummy before.
Run Code Online (Sandbox Code Playgroud)

使用一个级别null效果创建一个虚拟对象:

class DummyObject(object):
    def __getattr__(self, name):
        return lambda *x: None

logger = logger or DummyObject()
Run Code Online (Sandbox Code Playgroud)

将每个调试语句嵌套在块中:

if logger:
    logger.debug("abc")
Run Code Online (Sandbox Code Playgroud)