3

ロギング メッセージを何らかの処理方法にリダイレクトしたい (たとえば、すべてのメッセージをキューに保存するため)。現在、StringIO に書き込み、別の場所で読み取るために logging.StreamHandler を使用しようとしています。私の場合、これはストリームから継続的に読み取るスレッドである可能性がありますが、ログ エントリごとに呼び出されるコールバック メソッドである可能性もあります。

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の方法で主な目標をどのように達成しましたか?

  • 文字列をストリームに書き込み、別のスレッドで連続して読み取るにはどうすればよいですか?

4

1 に答える 1