我正在编写一个Python库,它需要在某个时候记录已经格式化的字符串。我想做这样的事情:
%(message)s
格式化程序替换所有格式化程序我在日志记录模块中找到的有关自定义格式化程序/处理程序的所有示例都假设我们可以指定完整的日志记录设置,因为我们实际上实现并运行了应用程序。在这里,我实现了一个可以在各种上下文中使用的库,但我不知道将设置什么样的处理程序。
从日志记录模块文档中,我不知道如何检索处理程序的详尽列表并获取其当前的格式化程序。
我使用Python 3.9。
为了提供更具体的上下文,我调用了一个带有自己的日志系统的外部软件(用 Matlab 编写)。我通过 stdout 收集这些日志,并希望将它们附加到 python 日志中,以获得统一的输出。 Matlab 日志已经格式化,解释了为什么我只想将它们逐字传递到 python 日志系统。
您可能还没有提供有关 Python 程序和外部应用程序之间交互的足够信息,但是如果您运行外部应用程序并收集其输出,您可以将其添加到日志中,如下所示:
import logging, subprocess
output = subprocess.check_output('ls -l'.split()) # example of external program
output = output.decode('utf-8')
logging.basicConfig(level=logging.DEBUG)
logging.debug('Output from external app follows:\n%s', output)
如果运行此代码,您将看到如下输出:
DEBUG:root:Output from external app follows:
total 128
drwxr-xr-x 1 runner runner 118 Jun 19 2023 76504696
drwxr-xr-x 1 runner runner 98 Aug 15 2023 76893030
drwxr-xr-x 1 runner runner 108 Sep 6 2023 77042978
当然,您的
ls
结果会有所不同,但您可以看到 ls -l
的输出已附加到日志中,没有任何特殊格式。