私はBufferingHandler
をサブクラス化してlogging.handlersモジュールにサブクラス化して独自のログハンドラを作成しています。logging.handlers.BufferingHandlerサブクラス化されたハンドラのログを2回表示する
from logging.handlers import BufferingHandler
import logging
LOG_FORMAT = '%(asctime)s %(levelname)s: %(message)s'
logger = logging.getLogger('LogArchiver')
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter(LOG_FORMAT)
class MyLogHandler(BufferingHandler):
def __init__(self, capacity):
logging.handlers.BufferingHandler.__init__(self, capacity)
def flush(self):
for record in self.buffer:
print(self.format(record))
#pass
def shouldFlush(self, record):
return False
h = MyLogHandler(1000)
h.setLevel(logging.INFO)
h.setFormatter(formatter)
logger.addHandler(h)
if __name__ == '__main__':
for i in range(5):
logger.info('test %s', i)
これがうまく機能したがBufferingHandlerが、私はいけない、デフォルトでコンソールに紅潮されるように二回ログの行を示しています。私は何を期待その印刷...
[email protected]:/mnt/tmp/alok# python /tmp/testlog.py
2017-11-29 15:01:07,480 INFO: test 0
2017-11-29 15:01:07,480 INFO: test 1
2017-11-29 15:01:07,480 INFO: test 2
2017-11-29 15:01:07,480 INFO: test 3
2017-11-29 15:01:07,480 INFO: test 4
2017-11-29 15:01:07,480 INFO: test 0
2017-11-29 15:01:07,480 INFO: test 1
2017-11-29 15:01:07,480 INFO: test 2
2017-11-29 15:01:07,480 INFO: test 3
2017-11-29 15:01:07,480 INFO: test 4
は、これは私がコンソール上に余分なフラッシュを見ていますどこからのみ
[email protected]:/mnt/tmp/alok# python /tmp/testlog.py
2017-11-29 15:01:07,480 INFO: test 0
2017-11-29 15:01:07,480 INFO: test 1
2017-11-29 15:01:07,480 INFO: test 2
2017-11-29 15:01:07,480 INFO: test 3
2017-11-29 15:01:07,480 INFO: test 4
を印刷する必要がありますか?
である必要があります。どのようにログを確認していますか?あなたが 'tail -f'をやっているのか、スクリプトが実行されたらログファイルを開くだけですか? – NoobEditor
私はそのカスタムハンドラと印刷ログのみをコンソールに使用しています。私は 'FileHandler'を使用していないので、ログを監視する' tail -f'のポイントはありません。 –