是否可以将上下文信息注入LoggerAdapter实例(该实例已具有一组“额外”参数),并在对象的整个生命周期中持久存在?我有一个要注入特定方法的参数,但我还需要其他使用实例的方法来具有该注入的参数。我有点尝试做logger.extra [“ foo”] =“ FOO”,但是没有用。任何帮助表示赞赏。
答案 0 :(得分:0)
这是一个可行的示例:
import logging
import logging.handlers
import sys
def main():
logger = logging.getLogger()
adapter = logging.LoggerAdapter(logger, extra={'foo': 'bar'})
sh = logging.StreamHandler()
sh.setFormatter(logging.Formatter('%(levelname)s %(message)s [%(foo)s]'))
logger.addHandler(sh)
adapter.warning('This is a test warning')
adapter.extra['foo'] = 'baz'
adapter.warning('This is another test warning')
logger.removeHandler(sh)
sh.close()
if __name__ == '__main__':
sys.exit(main())
运行时,它会打印
WARNING This is a test warning [bar]
WARNING This is another test warning [baz]
如您所见,适配器中的信息可以在实例化后进行更新。