问题:如何使用Python的RotatingFileHandler

我正在尝试对logging模块的RotatingFileHandler进行如下测试:

import logging
from logging.handlers import RotatingFileHandler

# logging.basicConfig(filename="example.log", level=logging.DEBUG)

logger = logging.getLogger('my_logger')
handler = RotatingFileHandler("my_log.log", maxBytes=2000, backupCount=10)
logger.addHandler(handler)

for _ in range(10000):
    logger.debug("Hello, world!")

但是,注释掉logging.basicConfig行后,生成的my_log.log文件不包含数据:

在此处输入图像描述

如果我在logging.basicConfig(filename="example.log", level=logging.DEBUG)行中添加注释,我会得到预期的带有编号后缀的my_log.log文件。但是,还有example.log是一个(相对)大的文件:

在此处输入图像描述

如何设置日志记录以便它只生成my_log.log文件,而不是大的example.log文件?

解答

Python 提供了 5 个开箱即用的日志记录级别(按严重性递增的顺序):DEBUGINFOWARNINGERRORCRITICAL。默认的是WARNING。文档说,那

没有_lvl_ 严重的日志消息将被忽略。

因此,如果您使用带有默认设置的.debug,您将不会在日志中看到任何内容。

最简单的解决方法是使用logger.warning函数而不是logger.debug:

import logging
from logging.handlers import RotatingFileHandler

logger = logging.getLogger('my_logger')
handler = RotatingFileHandler('my_log.log', maxBytes=2000, backupCount=10)
logger.addHandler(handler)

for _ in range(10000):
    logger.warning('Hello, world!')

如果要更改记录器级别,可以使用.setLevel方法:

import logging
from logging.handlers import RotatingFileHandler

logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
handler = RotatingFileHandler('my_log.log', maxBytes=2000, backupCount=10)
logger.addHandler(handler)

for _ in range(10000):
    logger.debug('Hello, world!')
Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐