python - 如何使用 Python 的 RotatingFileHandler

标签 python logging

我正在尝试对 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 文件不包含任何数据:

enter image description here

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

enter image description here

如何设置日志记录,使其仅生成 my_log.log 文件,而不生成大型 example.log 文件?

最佳答案

Python 提供 5 个开箱即用的日志记录级别(按严重性递增的顺序):DEBUGINFOWARNING错误CRITICAL。默认一个is WARNING .文档说,

Logging messages which are less severe than lvl will be ignored.

因此,如果您将 .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!')

关于python - 如何使用 Python 的 RotatingFileHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40088496/

相关文章:

java - 使用 SLF4J LevelChangePropagator 将 JUL 的日志重定向到 logback 失败

c - 如何允许 C 库使用调用者的日志记录?

python - 列出对不同长度元素的理解

python - PyGame - 无法使用 blit() 调用在屏幕上提供文本

python - 在 Python 中使用 Requests 库发送 "User-agent"

python - 在运行时指定 Django 查询过滤器

python - 无法将数据写入连接地址(neo4j python

java - 使用 java.util.logging.Logger 时如何在文本文件中写入日志

java - 你如何在 slf4j 中格式化异常?

java - 如何使用 Google Guice 注入(inject)记录器