2017-12-23 18 views
0

私はPythonコードにログを追加しています。メッセージはファイルに正しく記録されますが、すでにログに記録されているエントリをファイルに再ログオンするなど、重複したメッセージを記録しています。Pythonログで重複したエントリが追加される

これは私のコードです:

import logging 

logger = logging.getLogger('Sample') 
logger.setLevel(logging.DEBUG) 

formatter =logging.Formatter('%(message)s') 

handler=logging.FileHandler('./sample.log') 

handler.setFormatter(formatter) 

logger.addHandler(handler) 


def add(x, y): 
    return x + y 

num_1=10 
num_2=5 
add_result=add(num_1,num_2) 
logger.debug("Result: %s "%add_result) 

出力:

第一の実行: シングル出力

第二の実行: 3つの出力

第三の実行: 6つの出力

+0

多分それは "ログアペンダー"ですか?ロギングのドキュメントを見てください。各ロギングがファイルを再作成するかどうかは、それほど意義がないでしょうか?特に3分ごとにprogが実行される場合は特に...ログファイルの唯一の出力はlastsが実行されるものです。 –

+0

私は再現できません。このスクリプトでは、すべての実行でログに1行だけ正確に追加されます。その質問には反映されていない何かが起こっているはずです。おかげさまで – Mureinik

答えて

1

スクリプトをファイルtest_log.pyに保存してから、python test_log.pyを端末から実行してスクリプトを開始してください。このようにして、各実行では、常に1つのログメッセージをsample.logに追加する必要があります。

インタラクティブなPythonシェルでコードを複数回実行したと思います。 logger.addHandler(handler)行は常にloggerオブジェクトに新しいロギングハンドラを追加するので、コードを2回実行した後、実際には2つのロギングハンドラが両方ともsample.log - >重複したエントリに書き込まれます。

また、formatterformatter = logging.Formatter('%(asctime)-15s %(message)s')に変更してみてください。 これにより、ログメッセージにタイムスタンプが追加され(コードyear-month-day hour:minutes:seconds,milliseconds)、コードをよりよくデバッグできます。

+0

私のコードはインタラクティブモードで動作していました。できます – KMG

関連する問題