gpt4 book ai didi

Python TimedRotatingFileHandler 覆盖日志

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:02 25 4
gpt4 key购买 nike

我像这样设置TimedRotatingFileHandler:

import logging as logging
from logging.handlers import TimedRotatingFileHandler
import os
import time

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# new file every minute
rotation_logging_handler = TimedRotatingFileHandler('logs/log',
when='m',
interval=1,
backupCount=5)
rotation_logging_handler.setLevel(logging.DEBUG)

format = u'%(asctime)s\t%(levelname)s\t%(filename)s:%(lineno)d\t%(message)s'
rotation_logging_handler.setFormatter(logging.Formatter(format))
rotation_logging_handler.suffix = '%Y-%m-%d'

logger.addHandler(rotation_logging_handler)

用法:

logger.logging.info('Service started at port %s', config.get_param('port'))

while True:
time.sleep(21)
logger.logging.info('Now time is {}'.format(time.time()))

我预计每分钟来自 logs/log 的新消息都必须附加到当前日期的现有日志文件中。相反,来自 logs/log 的每分钟消息都会覆盖当前日期的现有日志文件。

我应该怎样做才能实现这种行为?

PS:经过小型研究,我发现 doRollover 方法中的 TimedRotatingFileHandler 会删除现有日志文件并创建新文件。因此,第一个解决方案是创建从 TimedRotatingFileHandler 派生的新处理程序 它创建新文件(例如带有一些索引)而不是删除现有日志文件。

最佳答案

当文件名旋转为您想要的任何名称时,通过覆盖 rotation_filename 来更改文件名是很有可能的。 BaseRotatingHandler的方法类并将其设置为适当的可调用对象。

这是一个执行相同操作的非常简单的示例,但您可以对其进行调整以满足您的需求。

import logging
from logging.handlers import TimedRotatingFileHandler
import datetime as dt

def filer(self):
now = dt.datetime.now()
return 'file.txt'+now.strftime("%Y-%m-%d_%H:%M:%S")


logger = logging.getLogger()
rotating_file_handler = TimedRotatingFileHandler(filename="/Users/rbhanot/file.txt",
when='S',
interval=2,
backupCount=5)
rotating_file_handler.rotation_filename = filer
formatter = logging.Formatter(
'%(asctime)s %(name)s:%(levelname)s - %(message)s')
rotating_file_handler.setFormatter(formatter)
logger.addHandler(rotating_file_handler)
logger.setLevel(logging.DEBUG)

logger.info("hello")

这是输出

❯ ls file*
file.txt file.txt2020-10-06_13:12:13 file.txt2020-10-06_13:12:15 file.txt2020-10-06_13:13:45

关于Python TimedRotatingFileHandler 覆盖日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48578648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com