Python日志记录 - 每次应用程序运行时的新日志文件

时间:2017-06-19 16:45:12

标签: python debugging logging

我一直在做研究,我很难完成我希望实现的目标。 目前,这就是我所拥有的(testlog.py)

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)。谢谢!

2 个答案:

答案 0 :(得分:13)

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...

应该像魅力一样工作。

答案 1 :(得分:-1)

如果在zwer发布的解决方案中将模式更改为“ a”,则在第一次运行时会得到一个空日志文件,此后它将按预期工作。只需将backupCount增加+1:-)