2017-07-20 24 views
0

Pythonロギングモジュールを使用して複数行ロガーを作成したいと思います。私はフォーマットロガーに以下のコードを使用する場合:Pythonロギングモジュールを使用して複数行ログを出力する方法は?

import logging 
logger = logging.getLogger(file_name) 
logger.setLevel(logging.DEBUG) 
ch = logging.StreamHandler() 
ch.setLevel(logging.DEBUG) 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
ch.setFormatter(formatter) 
logger.addHandler(ch) 

を私はlogger.info(「」「行1 \ NLINE 2 \ nは3行目を」「」を使用したとき、私は複数行のログについては、以下の出力を得ます)

2017-07-20 13:21:14,754 - my_logger.py - INFO - line 1 
line 2 
line 3 

私は以下のように私の出力をしたい:

2017-07-20 13:21:14,754 - my_logger.py - INFO - line 1 
2017-07-20 13:21:14,754 - my_logger.py - INFO - line 2 
2017-07-20 13:21:14,754 - my_logger.py - INFO - line 3 
+0

'logger.info()'を複数回呼び出すことができない理由はありますか? – Jakub

+0

@Jakub私はフレームワーク用のロガーを作成し、このようなフォーマッターを使いたいと思っています。 – pankmish

答えて

2

あなたがあなた自身のフォーマッタを作成することができます。

import logging 
class MultilineFormatter(logging.Formatter): 
    def format(self, record: logging.LogRecord): 
     save_msg = record.msg 
     output = "" 
     for line in save_msg.splitlines(): 
      record.msg = line 
      output += super().format(record) + "\n" 
     record.msg = save_msg 
     record.message = output 
     return output 

ロガーの初期化を次のように変更してください:

formatter = MultilineFormatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
0

短い答え、あなたがすることはできません。あなたは行うことができますは以下の通りです:

logger.info('line 1') 
logger.info('line 2') 
logger.info('line 3') 

それとも、複数行のものを持っている場合、あなたが行うことができます。これらが同時に表示されません

map(logger.info, 'line 1\nline 2\nline 3'.split('\n')) 

が、非常になります近くに...

関連する問題