2

来自 Java,建议将 log.debug 包装为

if (log.isDebugEnabled())
    log.debug("blah blah blah "+someObject+" more blahs than you can blah at"):

在 python 中是否有类似的原因?还是python以不同的方式处理字符串?

4

2 回答 2

3

建议的答案忽略了字符串连接的开销和任何繁重的方法调用。

所以这:

log.debug("blah blah blah "+someObject+" more blahs than you can blah at")

将花费字符串联系,即使在 ERROR 日志记录级别。

不同的语言/记录器以不同的方式管理它,检查 isDebugEnabled() 或 isEnabledFor() 是好的最佳实践。

当然,如果这不相关,你不应该预先优化,就像这个世界上的任何事情一样。

于 2016-04-24T12:08:17.413 回答
1

无需额外检查。只需配置您的日志记录级别

>>> import logging
>>> root = logging.getLogger()
>>> root.setLevel(logging.INFO)
>>> root.addHandler(logging.StreamHandler())
>>> logging.error("test")
test
>>> logging.debug("test")
>>>

同样,不需要额外的检查(源代码取自logging/__init__.py):

class Logger(Filterer):
    ...
    def debug(self, msg, *args, **kwargs):
        """
        Log 'msg % args' with severity 'DEBUG'.

        To pass exception information, use the keyword argument exc_info with
        a true value, e.g.

        logger.debug("Houston, we have a %s", "thorny problem", exc_info=1)
        """
        if self.isEnabledFor(DEBUG):
            self._log(DEBUG, msg, args, **kwargs)

如您所见,日志记录本身会进行检查。

希望有帮助。

于 2013-06-28T09:30:30.763 回答