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

pra*_*ect 7 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
Run Code Online (Sandbox Code Playgroud)

它目前成功打印到控制台和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).谢谢!

zwe*_*wer 16

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...
Run Code Online (Sandbox Code Playgroud)

应该像魅力一样工作.

  • @Vrishank `RotatingFileHandler` 使用基本文件名来确定旋转的日志名称,您不能将其设置为使用时间戳或除旋转文件的 `<base_name>.<n>` 之外的任何其他内容。话虽这么说,这是Python,你总是可以重写内部结构以让它执行你的命令,你可以在[这个答案](/sf/answers/2754579271/)中查看一种方法。 。 (3认同)
  • 它在每次运行时创建空日志文件 (2认同)
  • 如何添加时间戳而不是 .log.1, .log.2 ? (2认同)