2017-06-19 117 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... 

应该像一个魅力。

相关问题