2017-07-08 107 views
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='%')的文檔。你需要通過的第二個參數是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

非常感謝 –