以下を という名前のファイルに入れてから、repro.py
と入力しましたpython repro.py
。(私は C Python 2.7.5 を使用しています)。質問のエラーで失敗しました。ソースは、 LoggerAdapter クラスにその名前のメソッドがないことを確認していますが、ドキュメント ( http://docs.python.org/2/library/logging.html#logging.LoggerAdapter ) には次のように書かれています:
上記に加えて、LoggerAdapter は以下のロガーのメソッドをサポートします。すなわち、debug()、info()、warning()、error()、exception()、critical()、log()、isEnabledFor()、getEffectiveLevel() 、setLevel()、hasHandlers()。これらのメソッドは Logger の対応するメソッドと同じ署名を持っているため、2 種類のインスタンスを同じ意味で使用できます。
これはバグですか、それとも何か誤解していますか? 後者の場合、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")