在Python中,可以使用logging模块进行日志记录和归档。要实现日志归档,可以使用logging模块中的RotatingFileHandler或TimedRotatingFileHandler类。
下面是一个使用RotatingFileHandler实现日志归档的示例代码:
import logging
from logging.handlers import RotatingFileHandler
# 创建logger对象
logger = logging.getLogger("example")
logger.setLevel(logging.DEBUG)
# 创建RotatingFileHandler对象
handler = RotatingFileHandler("example.log", maxBytes=10000, backupCount=5)
handler.setLevel(logging.DEBUG)
# 设置日志格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# 将handler添加到logger对象中
logger.addHandler(handler)
# 记录日志
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")
logger.critical("This is a critical message")
在上面的示例中,创建了一个logger对象,并使用RotatingFileHandler创建了一个RotatingFileHandler对象。这个RotatingFileHandler对象会将日志记录到example.log文件中,并在文件大小达到10KB时自动切割文件,最多保留5个旧日志文件。
除了RotatingFileHandler,还可以使用TimedRotatingFileHandler实现按时间归档日志文件。示例代码如下:
import logging
from logging.handlers import TimedRotatingFileHandler
# 创建logger对象
logger = logging.getLogger("example")
logger.setLevel(logging.DEBUG)
# 创建TimedRotatingFileHandler对象
handler = TimedRotatingFileHandler("example.log", when="midnight", interval=1, backupCount=5)
handler.setLevel(logging.DEBUG)
# 设置日志格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# 将handler添加到logger对象中
logger.addHandler(handler)
# 记录日志
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")
logger.critical("This is a critical message")
在上面的示例中,创建了一个TimedRotatingFileHandler对象,它会在每天午夜切割日志文件并保留5个旧日志文件。
通过使用RotatingFileHandler或TimedRotatingFileHandler,可以实现日志的自动归档,确保日志文件不会无限增长。