2017-06-19 79 views
0

我一直在做研究工作,並且正在完成我希望實現的任務時非常困難。 目前,這是我有什麼(testlog.py)Python日誌記錄 - 每次應用程序運行時都會創建新的日誌文件

import logging 
import logging.handlers 

filename = "example.log" 

logger = logging.getLogger() 
logger.setLevel(logging.DEBUG) 
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") 

handler = logging.handlers.RotatingFileHandler(filename, mode = 'w', backupCount = 5) 
handler.setLevel(logging.DEBUG) 
handler.setFormatter(formatter) 
logger.addHandler(handler) 

ch = logging.StreamHandler() 
ch.setLevel(logging.DEBUG) 
ch.setFormatter(formatter) 
logger.addHandler(ch) 

for i in range(10): 
    logger.debug("testx") #where I alternate x from 1 thru 9 to see output 

目前,它成功地打印到控制檯和example.log,這就是我想要的。

我每次運行它,它使一個新的文件,並替換舊example.log像這樣:

運行與logger.debug("test1")

example.log包含test1的10倍,它應該像

logger.debug("test2")

運行它重寫example.log包含test2的10倍 等等

不過,我想爲代碼我每次運行程序時作一個新的日誌文件,這樣我有

example.log

example.log1

example.log2

...

example.log5

最後,我想爲這個文件打印日誌消息到控制檯,到日誌文件,並且我想要一個新的日誌文件(高達* .5),每當我運行該程序。謝謝!

+0

已解決!我所做的只是在末尾添加'logging.handlers.RotatingFileHandler.doRollover(處理程序)' – practicemakesperfect

+0

最後不要這麼做 - 如果你的腳本失敗了,那麼中點沒有達到最終的結果,你將不會得到新的日誌文件在下一次啓動。在初始化日誌時執行此操作。 – zwer

回答

1

logging.handlers.RotatingFileHandler旋轉或者基於大小或日期的日誌,但你可以強制使用RotatingFileHandler.doRollover()所以像旋轉:

import logging.handlers 
import os 

filename = "example.log" 

# your logging setup 

should_roll_over = os.path.isfile(filename) 
handler = logging.handlers.RotatingFileHandler(filename, mode='w', backupCount=5) 
if should_roll_over: # log already exists, roll over! 
    handler.doRollover() 

# the rest of your setup... 

應該像一個魅力。

相關問題