代码之家  ›  专栏  ›  技术社区  ›  Neosapien

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

  •  1
  • Neosapien  · 技术社区  · 6 年前

    是否可以将上下文信息注入LoggerAdapter实例(该实例已经有一组“额外”参数)并在对象的整个生命周期中保持它?我有一个参数,我想注入一个特定的方法,但我也需要其他方法,使用实例有注入的参数。我试着去做logger.extra[“foo”]=“foo”,但没用。如有任何帮助,我们将不胜感激。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Vinay Sajip    6 年前

    下面是一个工作示例:

    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]
    

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