想利用 Python 的 logging 模块每天自动创建一个新的日志文件,可以使用 logging.handlers.TimedRotatingFileHandler 类。
代码如下:
import logging
from logging.handlers import TimedRotatingFileHandler
# 创建一个 logger
logger = logging.getLogger("user")
logger.setLevel(logging.INFO)
# 创建一个 handler,用于写入日志文件
# midnight: 表示日志文件在每天半夜时分滚动
# interval: 间隔时间单位的个数,指等待多少个 when 的时间后 Logger 会自动重建新闻继续进行日志记录
# backupCount: 表示日志文件的保留个数,假如为7,则会保留最近的7个日志文件
save_handler = TimedRotatingFileHandler("mylog.log", when="midnight", interval=1, backupCount=7)
save_handler.suffix = "%Y-%m-%d" # 设置日志文件名的时间戳格式
# 创建一个 handler,用于输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO) # 设置 handler 级别为 INFO
# 创建一个 formatter,用于设置日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 设置 handler 的格式
save_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# 为 logger 添加 handler
logger.addHandler(save_handler)
logger.addHandler(console_handler)
# 记录日志
logger.info('This is a log info')
logger.debug('Debugging')
logger.warning('Warning exists')
logger.error('Error!')
在这个示例中,首先创建了一个 logger,并设置了它的级别为 INFO。然后创建了一个 TimedRotatingFileHandler,设置它在每天的午夜时分滚动日志文件,并保留最近的7个日志文件。此外还设置了日志文件名的时间戳格式为 “Y-m-d”。然后,创建了一个 formatter,并设置了日志的格式。最后,我们将 formatter 设定到 handler,并将 handler 添加到 logger。当记录一条日志时,它会被写入到当前的日志文件中,当时间到达午夜时分,当前的日志文件会被关闭,并创建一个新的日志文件。
运行这个示例,会看到一个名为 “mylog.log” 的日志文件被创建,并且日志信息被写入到这个文件中。当时间到达下一个午夜时分,当前的 “mylog.log” 文件会被重命名为如 “mylog.log.2023-07-24” 这样的形式,然后会创建一个新的 “mylog.log” 文件。
console结果:
文件保存结果: