14.8.4 旋转日志文件
反复运行以上代码清单中的脚本会向这个文件追加更多消息。要想在每次程序运行时创建一个新文件,可以向basicConfig()的参数filemode传入值’w’。不过,最好不要采用这种方式管理文件的创建,更好的做法是使用一个RotatingFileHandler,它会自动创建新文件,同时保留原来的日志文件。
import glob
import logging
import logging.handlers
LOG_FILENAME = 'logging_rotatingfile_example.out'
# Set up a specific logger with the desired output level.
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)
# Add the log message handler to the logger.
handler = logging.handlers.RotatingFileHandler(
LOG_FILENAME,
maxBytes=20,
backupCount=5,
)
my_logger.addHandler(handler)
# Log some messages.
for i in range(20):
my_logger.debug('i = %d' % i)
# See which files are create.
logfiles = glob.glob('%s*' % LOG_FILENAME)
for filename in logfiles:
print(filename)
最后会得到6个单独的文件,分布包含应用的部分日志历史。
在这个例子中,最新的文件总是logging_rotatingfile_example.out,每次达到大小限制时,就会加后缀.1进行重命名。现有的各个备份文件也会被重命名,使后缀递增(.1变成.2,等等),并且,.5文件会被删除。
说明:显然,这个例子将日志长度设置得太小,只可作为一个极端的例子。在实际程序中要把maxBytes设置为一个更合适的值。