我将以下内容放入名为repro.py
的文件中,然后输入python repro.py
。 (我正在使用C Python 2.7.5)。它因问题中的错误而失败。源确认LoggerAdapter类上没有该名称的方法,但文档(http://docs.python.org/2/library/logging.html#logging.LoggerAdapter)表示存在:
除上述内容外,LoggerAdapter还支持以下Logger方法,即debug(),info(),warning(),error(),exception(),critical(),log(),isEnabledFor(), getEffectiveLevel(), setLevel(),hasHandlers()。这些方法与Logger中的对应方法具有相同的签名,因此您可以交替使用这两种类型的实例。
这是一个错误,还是我误解了什么?如果是后者,是否确实可以使用LoggerAdapter实例作为Logger实例的替代品?
import logging logging.basicConfig ()
class CustomAdapter(logging.LoggerAdapter):
def process(self, msg, kwargs):
return '[%s] %s' % (self.extra['connid'], msg), kwargs
logger = logging.getLogger(__name__)
adapter = CustomAdapter(logger, {'connid': '1234'})
adapter.setLevel (logging.WARN)
adapter.warning ("Ahoy matey")
答案 0 :(得分:5)
你没有错。文档声明不受支持的功能。 LoggerAdapter类继承自object
,而不是Logger,因此它仅支持它明确定义的方法。但是,它会将您传入的记录器实例存储为self.logger。
所以,现在,你可以这样做:
adapter.logger.setLevel(logging.WARN)
我同意,这可能是文档中的错误,也可能是实现中的错误,具体取决于您如何看待它。