临时修改Python库中的日志记录格式(未知日志记录上下文)

问题描述 投票:0回答:1

我正在编写一个Python库,它需要在某个时候记录已经格式化的字符串。我想做这样的事情:

  1. 存储当前日志配置
  2. 用基本的
    %(message)s
    格式化程序替换所有格式化程序
  3. 记录字符串
  4. 恢复日志配置

我在日志记录模块中找到的有关自定义格式化程序/处理程序的所有示例都假设我们可以指定完整的日志记录设置,因为我们实际上实现并运行了应用程序。在这里,我实现了一个可以在各种上下文中使用的库,但我不知道将设置什么样的处理程序。

从日志记录模块文档中,我不知道如何检索处理程序的详尽列表并获取其当前的格式化程序。

我使用Python 3.9。

为了提供更具体的上下文,我调用了一个带有自己的日志系统的外部软件(用 Matlab 编写)。我通过 stdout 收集这些日志,并希望将它们附加到 python 日志中,以获得统一的输出。 Matlab 日志已经格式化,解释了为什么我只想将它们逐字传递到 python 日志系统。

python logging
1个回答
0
投票

您可能还没有提供有关 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
的输出已附加到日志中,没有任何特殊格式。

© www.soinside.com 2019 - 2024. All rights reserved.