gpt4 book ai didi

python - 使用流重定向 python 日志消息

转载 作者:行者123 更新时间:2023-11-28 19:23:41 26 4
gpt4 key购买 nike

我想将日志消息重定向到某种处理方法(例如,为了将所有消息保存在队列中)。目前我正在尝试使用 logging.StreamHandler 来写入 StringIO 然后在其他地方读取它。在我的例子中,这可能是一个不断从流中读取的线程,但它也可能是在每个日志条目上调用的回调方法。

import threading
import time
import sys
import logging
from StringIO import StringIO

# this thread shall read from a stream
# continuously and
def tread_fn( stream ):
while not stream.eof(): <=== this is not valid but my current approach
l = stream.readline()
do_something( l )

stream = StringIO()

handler = logging.StreamHandler(stream)
log = logging.getLogger()
log.setLevel( logging.INFO )

# replace all log handlers
for handler in log.handlers:
log.removeHandler(handler)
log.addHandler(handler)

thread = threading.Thread(target = tread_fn, args=[stream])
thread.start()

for i in range(3):
time.sleep(1)
log.error("test") <=== should be handled line by line

我觉得我忽略了非常明显和简单的最佳实践,但我现在挣扎了一段时间:)也许我根本不需要流,但目前我什至无法写入流并从其他地方读取它。所以简而言之,我的问题是:

  • 主要目标是如何用python方式实现的?

  • 如何将字符串写入流并在另一个线程中连续读取?

最佳答案

您将两个问题合二为一 - 它们应该是不同的问题。您的主要目标可以使用例如实现QueueHandler,在 Python 3.2 及更高版本中可用,但也可通过 logutils 用于较早的 Python 版本项目。

关于python - 使用流重定向 python 日志消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18405190/

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