我想将日志记录消息重定向到某种处理方法(例如,以便将所有消息保存在队列中(。目前,我正在尝试使用日志记录。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 及更高版本中可用,但也可用于早期的 Python 版本通过logutils
项目。