2017-07-08 9 views
2

ログメッセージをコンソール(またはログファイル)に出力すると、同じ日付のログメッセージが表示されます。メッセージ間のタイムアウトは2秒です。ここに私のコードはここPythonロギング。メッセージは同じ日付です

folder = "logs" 
log_name = {}.log 
file_name = os.path.join(folder, log_name) 

date_format = "%Y-%m-%d_%H:%M:%S" 
name_format = "[%(asctime)s] [%(levelname)s] [%(filename)s:%(lineno)s] - %(message)s" 

log = logging.getLogger('') 
log.setLevel(logging.DEBUG) 
format = logging.Formatter(name_format, datetime.now().strftime(date_format)) 

console_handler = logging.StreamHandler(sys.stderr) 
file_handler = handlers.RotatingFileHandler(filename=datetime.now().strftime(file_name.format(date_format)), 
              maxBytes=(1048576*5), 
              backupCount=7) 
console_handler.setFormatter(format) 
file_handler.setFormatter(format) 

log.addHandler(console_handler) 
log.addHandler(file_handler) 


from time import sleep 
log.info("1") 
sleep(2) 
log.info("2") 
sleep(2) 
log.info("3") 

が出力されます。

[2017-07-08_17:20:51] [INFO] [logs.py:112] - 1 
[2017-07-08_17:20:51] [INFO] [logs.py:114] - 2 
[2017-07-08_17:20:51] [INFO] [logs.py:116] - 3 

答えて

6

logging.Formatter(fmt=None, datefmt=None, style='%')のドキュメントを見てください。 2番目の引数は、datefmt(あなたの場合は"%Y-%m-%d_%H:%M:%S")です。ロガーはfmt.strftime(...)をあなたのために行います。

datetime.now()を表す文字列をこの形式で渡しています。これはstr(例えば'2017-07-08_17:20:51')であるとしてフォーマッタは文句を言うが、常にこの正確な日付印刷していません:。'2017-07-08_17:20:51'.strftime(...)'2017-07-08_17:20:51'になります - を埋めるために何のフォーマット指定はありませんが

あなたが何をすべきか、このです:

fmt = logging.Formatter(name_format, date_format) 
# instead of 
# format = logging.Formatter(name_format, datetime.now().strftime(date_format)) 

は(ところで:formatが内蔵されて、内蔵されたが上書きされないようにfmtにあなたのフォーマッタを改称しました)。

+0

ありがとう –

関連する問題