Python中LOGGING模块实现日志的定时清理和压缩
发布时间:2024-01-15 00:50:11
在Python中,可以使用logging模块来实现日志的记录、清理和压缩。
下面是一个使用logging模块记录日志、定时清理和压缩日志的例子:
import logging
import logging.handlers
import datetime
import os
def setup_logging(log_file):
# 创建logger对象
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
# 创建文件处理器handler,将日志写入文件
file_handler = logging.handlers.RotatingFileHandler(log_file, maxBytes=1024 * 1024, backupCount=5) # 每个日志文件最大1MB,备份文件最多5个
file_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
# 创建控制台处理器handler,将日志输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
console_handler.setFormatter(formatter)
# 添加处理器到logger对象
logger.addHandler(file_handler)
logger.addHandler(console_handler)
return logger
def clean_old_logs(log_folder, keep_days):
now = datetime.datetime.now()
for file_name in os.listdir(log_folder):
file_path = os.path.join(log_folder, file_name)
if os.path.isfile(file_path):
# 获取文件的修改时间
modify_time = datetime.datetime.fromtimestamp(os.path.getmtime(file_path))
if (now - modify_time).days >= keep_days:
os.remove(file_path)
def compress_logs(log_folder):
for file_name in os.listdir(log_folder):
file_path = os.path.join(log_folder, file_name)
if os.path.isfile(file_path) and not file_name.endswith('.zip'):
compressed_file_path = file_path + '.zip'
with zipfile.ZipFile(compressed_file_path, 'w') as zip_file:
zip_file.write(file_path, arcname=file_name)
os.remove(file_path)
if __name__ == '__main__':
log_folder = 'logs'
log_file = os.path.join(log_folder, 'app.log')
keep_days = 30
# 创建日志文件夹
if not os.path.exists(log_folder):
os.makedirs(log_folder)
# 设置日志
logger = setup_logging(log_file)
# 记录日志
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
# 清理日志
clean_old_logs(log_folder, keep_days)
# 压缩日志
compress_logs(log_folder)
在上面的例子中,首先通过setup_logging函数设置了日志的格式和输出方式。这里使用了RotatingFileHandler去创建文件处理器,该处理器会根据文件大小自动切分日志文件,并且保留一定数量的备份文件。
然后,记录了一些日志消息。
接着,通过clean_old_logs函数清理了超过指定天数的日志文件。
最后,通过compress_logs函数将日志文件压缩为.zip格式。这里使用了zipfile模块的ZipFile类来创建压缩文件,并使用write方法将源文件添加到压缩文件中。
注意,上述代码中使用了datetime和os模块来操作时间和文件系统。并且在运行之前,需要确保logs文件夹已经存在。
以上就是使用logging模块实现日志的定时清理和压缩的例子。通过这个例子,可以实现对日志文件的动态管理,使日志文件的大小和数量保持合理的范围,同时节省存储空间。
