gpt4 book ai didi

Python 日志记录 : Inherit contextual information

转载 作者:太空宇宙 更新时间:2023-11-04 04:56:40 25 4
gpt4 key购买 nike

考虑以下日志记录示例。有两个 python 文件,myapp.py 和 mylib.py。

# myapp.py
import logging
import mylib

class customAdapter(logging.LoggerAdapter):
def process(self, msg, kwargs):
return '[%s] %s' % (self.extra['connid'], msg), kwargs

def main():
logging.basicConfig(filename='myapp.log', level=logging.INFO)
logger = logging.getLogger('test')
adapter = customAdapter(logger,{'connid': 123})
adapter.info('Started')
mylib.do_something()
adapter.info('Finished')

if __name__ == '__main__':
main()

# mylib.py
import logging

def do_something():
lgr = logging.getLogger('test')
lgr.info('Doing something')

当您执行 myapp.py 时,您会在日志文件中得到以下输出:

INFO:test:[123] Started
INFO:test:Doing something
INFO:test:[123] Finished

我正在尝试让登录继承从父代码获取的上下文信息。期望的输出:

INFO:test:[123] Started
INFO:test:[123] Doing something
INFO:test:[123] Finished

这可能吗? (注意“[123]”包含在日志的第 2 行中)

以下是一些其他相关信息:

  • 我正在使用 python 3.5
  • 我试图避免将任何参数传递给“do_something”函数。
  • 在实际使用中,“connid”的值是动态的。
  • 这将在 Django View 中使用。将 main() 替换为 Django View 。

最佳答案

您无法轻松地为第三方库执行此操作(因为它们不会使用适配器,即使您在代码中使用了适配器)。但是,您可以使用过滤器来执行此操作,如文档中所述 here .

关于Python 日志记录 : Inherit contextual information,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46895678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com