2017-06-08 15 views
1

私は別のStringIOにログを記録しようとしています。私は、各ロガーがインスタンス化されて与えられた各StringIOに書き込むことを期待していました。しかし、それは動作していません、最初のStringIOだけがログに記録された情報を格納します。 私は何が欠けている?Pythonのロギング、2つの別に情報を書き込む方法

import logging 
    from StringIO import StringIO 
    formatter = logging.Formatter('%(asctime)s %(name)-3s %(levelname)-4s %(message)s') 

    log_stream1 = StringIO() 
    log1 = logging.getLogger('a') 
    log1.setLevel(logging.DEBUG) 
    stream_handler1 = logging.StreamHandler(log_stream1) 
    stream_handler1.setLevel(logging.INFO) 
    stream_handler1.setFormatter(formatter) 
    log1.addHandler(stream_handler1) 

    log_stream2 = StringIO() 
    log2 = logging.getLogger('b') 
    log2.setLevel(logging.DEBUG) 
    stream_handler2 = logging.StreamHandler(log_stream2) 
    stream_handler2.setLevel(logging.INFO) 
    stream_handler2.setFormatter(formatter) 
    log2.addHandler(stream_handler1) 

    log1.info('log1') 
    log2.info('log2') 

出力:

In [6]: log_stream1.getvalue() 
    Out[6]: '2017-06-08 10:05:12,468 a INFO log1\n2017-06-08 10:05:12,468 b INFO log2\n' 

    In [7]: log_stream2.getvalue() 
    Out[7]: '' 
+0

変更 'log2.addHandler log2.addHandler(stream_handler2)'へ(stream_handler1) '' –

答えて

1

変更

log2.addHandler(stream_handler1) 

log2.addHandler(stream_handler2) 

全体コード:

import logging 
from StringIO import StringIO 
formatter = logging.Formatter('%(asctime)s %(name)-3s %(levelname)-4s %(message)s') 

log_stream1 = StringIO() 
log1 = logging.getLogger('a') 
log1.setLevel(logging.DEBUG) 
stream_handler1 = logging.StreamHandler(log_stream1) 
stream_handler1.setLevel(logging.INFO) 
stream_handler1.setFormatter(formatter) 
log1.addHandler(stream_handler1) 

log_stream2 = StringIO() 
log2 = logging.getLogger('b') 
log2.setLevel(logging.DEBUG) 
stream_handler2 = logging.StreamHandler(log_stream2) 
stream_handler2.setLevel(logging.INFO) 
stream_handler2.setFormatter(formatter) 
log2.addHandler(stream_handler2) 

log1.info('log1') 
log2.info('log2') 
0

あなたはlog2.addHandler(stream_handler1)を書きました。 log2.addHandler(stream_handler2)と記述してください。

関連する問題