每次启动应用程序时轮换日志文件(Python)
问题描述
我在 Python 中使用日志记录模块,我希望它在每次启动我的应用程序时创建一个新的日志文件.应该轮换较旧的日志文件(例如:logfile.txt -> logfile1.txt 等).
I'm using the logging module in Python and I would like it to create a new logfile each time my application is started. The older logfiles shoud be rotated (eg: logfile.txt -> logfile1.txt, etc).
我已经找到了:
http://docs.python.org/library/logging.html
BaseRotatingHandler 是基类对于将日志文件轮换到的处理程序某一点.这并不意味着直接实例化.相反,使用RotatingFileHandler 或TimedRotatingFileHandler.
BaseRotatingHandler is the base class for handlers that rotate log files at a certain point. It is not meant to be instantiated directly. Instead, use RotatingFileHandler or TimedRotatingFileHandler.
RotatingFileHandler 以预定大小进行翻转,而 TimedRotatingFileHandler 根据时间和间隔的乘积进行翻转.两者都不是我想要的,我希望在我的应用程序启动时立即进行轮换.
The RotatingFileHandler does a rollover at a predetermined size and the TimedRotatingFileHandler does a rollover based on the product of when and interval. Both are not what I want, I want the rotation to happen immediately when my application starts.
解决方案
我可能用RotatingFileHandler
不用maxBytes
就够了,然后调用doRollover()
在应用程序启动时.
I might be enough to use RotatingFileHandler
without maxBytes
, then call doRollover()
on application start.
是的,似乎工作正常.下面的代码将在每个应用程序运行时创建一个新的日志文件,并为日志开始和关闭时间添加时间戳.运行它将打印可用日志文件的列表.您可以检查它们以检查正确的行为.改编自 Python 文档示例:
Yup, seems to work fine. The code below will create a new log file on each application run, with added timestamps for log start and close times. Running it will print the list of available log files. You can inspect them to check correct behavior. Adapted from the Python docs example:
import os
import glob
import logging
import logging.handlers
import time
LOG_FILENAME = 'logging_rotatingfile_example.out'
# Set up a specific logger with our desired output level
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)
# Check if log exists and should therefore be rolled
needRoll = os.path.isfile(LOG_FILENAME)
# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(LOG_FILENAME, backupCount=50)
my_logger.addHandler(handler)
# This is a stale log, so roll it
if needRoll:
# Add timestamp
my_logger.debug('
---------
Log closed on %s.
---------
' % time.asctime())
# Roll over on application start
my_logger.handlers[0].doRollover()
# Add timestamp
my_logger.debug('
---------
Log started on %s.
---------
' % time.asctime())
# Log some messages
for i in xrange(20):
my_logger.debug('i = %d' % i)
# See what files are created
logfiles = glob.glob('%s*' % LOG_FILENAME)
print '
'.join(logfiles)
相关文章