实例化后如何将上下文信息添加到LoggerAdapter实例?

时间:2018-09-06 17:04:43

标签: python logging

是否可以将上下文信息注入LoggerAdapter实例(该实例已具有一组“额外”参数),并在对象的整个生命周期中持久存在?我有一个要注入特定方法的参数,但我还需要其他使用实例的方法来具有该注入的参数。我有点尝试做logger.extra [“ foo”] =“ FOO”,但是没有用。任何帮助表示赞赏。

1 个答案:

答案 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]

如您所见,适配器中的信息可以在实例化后进行更新。