我正在尝试为一个类似于Linux的自动滚动记录器的应用程序创建一个滚动记录器。记录器应该创建一个名为logs
(如果它不存在)的目录,并在每次运行应用程序时创建一个新的日志文件。我希望程序有10个名为log0000.log
到log0010.log
的日志文件。如果logs
目录中有超过10个文件,它将删除最旧的日志文件,然后对所有文件进行移位/滚动/重命名,为当前日志腾出空间。在
因为有10多个文件,它应该删除log0000.log
并重命名每个日志文件,以便为新文件腾出空间。每次运行程序时,我都实现了创建日志逻辑,但是当目录中有10个以上的文件时,我就无法转换日志了。在
import os
import time
import logging
class RollingLogger(object):
def __init__(self):
self.NUMBER_OF_LOGS = 10
self.initialize_logger_settings()
def initialize_logger_settings(self):
"""Set logger configuration settings"""
self.initialize_log_directory()
logging.basicConfig(filename= self.path + self.filename,
filemode='w',
level=logging.INFO,
format='%(asctime)s.%(msecs)03d,%(message)s',
datefmt='%d-%b-%y,%H:%M:%S')
logging.info('Successfully loaded logger configuration settings')
def initialize_log_directory(self):
"""Create directory and log file"""
self.path = 'logs/'
if not os.path.exists(self.path):
os.makedirs(self.path)
self.filename = 'log0000.log'
else:
self.filename = self.get_next_log_file_name()
def get_next_log_file_name(self):
"""Scans log directory for latest log file and returns a new filename"""
def extract_digits(filename):
s = ''
for char in filename:
if char.isdigit():
s += char
return int(s)
l = [extract_digits(filename) for filename in os.listdir(self.path)]
# Directory is empty
if not l:
return 'log0000.log'
# Directory has files so find latest
else:
latest_file_number = max(l)
return 'log' + '{0:04d}'.format(latest_file_number + 1) + '.log'
logger = RollingLogger()
1创建记录器.ini文件
2使用ini文件初始化_logger.py在
^{pr2}$3设置日志路径
4使用记录器记录
基本上你应该做的是:
您的
else
子句应该如下所示:还要注意,如果你想要10个文件,它们的编号应该在0-9之间。在
相关问题 更多 >
编程相关推荐