gpt4 book ai didi

python - 配置第三方脚本的日志记录

转载 作者:IT老高 更新时间:2023-10-28 21:12:12 27 4
gpt4 key购买 nike

我有一个第三方 python 控制台脚本,我不想修改它的源代码。

但我想配置由脚本及其库完成的日志记录。该脚本使用标准的 python 日志记录,但不支持对其进行配置。

脚本使用这种模式:

import logging
logger=logging.getLogger(__name__)

用例:

  • 我希望忽略文件 foo.py 的 INFO 消息。
  • 我想在日志消息中包含 PID。

如果我不想修改控制台脚本的来源,如何配置日志记录?

脚本通过 cron 调用。

如果使用此脚本,我该如何配置日志记录?

重要

创建包装脚本,如 this answer对我来说不是解决方案。

linux 进程层次结构如下所示:

Cron -> third_party_script

cron 和 third_party_script 之间应该有任何“胶水”、“包装”或“dirty-hack”脚本。

为什么要突兀/挑剔?

我想练习“关注点分离”。我希望能够一次在一个地方配置日志记录。这个配置应该被 virtualenv 的所有 python 代码使用。编写包装器将是一种解决方法。我想要一个解决方案。

更新

几个月后,我认为 pth 文件将是一个简单的答案。

最佳答案

库不应该配置日志记录 - 这取决于应用程序开发人员。 Inbar Rose 的回答并不完全正确。如果您引用的模块名为 foo,那么在其 getLogger 调用中对 __name__ 的引用将传入 foo 。所以在你的配置代码中,你需要做相当于

logging.getLogger('foo').setLevel(logging.WARNING)

要在日志中包含 PID,只需确保为格式化程序使用适当的格式字符串,即包含 %(process)d 的格式字符串。一个简单的例子是:

logging.basicConfig(format='%(process)d %(message)s')

请注意,您不能同时从多个进程写入同一个日志文件 - 您可能需要考虑 an alternative approach如果你想这样做。

更新: 应用程序开发人员是编写 Python 代码的人,该代码不是库,而是由例如调用。通过命令行或其他方式创建 Python 进程的用户或其他脚本。

使用我上面贴的代码,不需要封装或修改第三方代码,只要是库即可。例如调用第三方库的主脚本中:

if __name__ == '__main__':
# configure logging here
# sets the third party's logger to do WARNING or greater
# replace 'foo' with whatever the top-level package name your
# third party package uses
logging.getLogger('foo').setLevel(logging.WARNING)
# set any other loggers to use INFO or greater,
# unless otherwise configured explicitly
logging.basicConfig(level=logging.INFO, format='%(process)d %(message)s')
# now call the main function (or else inline code here)
main()

如果第三方代码通过 cron 运行,则它不是库代码 - 它是一个应用程序,您可能不走运。

关于python - 配置第三方脚本的日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29962525/

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