如何禁用标准错误流的日志记录?

223 投票
22 回答
310266 浏览
提问于 2025-04-15 19:18

如何在Python中关闭标准错误流上的日志记录?下面这个方法不起作用:

import logging

logger = logging.getLogger()
logger.removeHandler(sys.stderr)
logger.warning('foobar')  # emits 'foobar' on sys.stderr

22 个回答

82

你可以使用:

logging.basicConfig(level=your_level)

其中 your_level 可以是以下这些:

'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL

所以,如果你把 your_level 设置为 logging.CRITICAL,那么你只会收到那些严重级别的消息,这些消息是由:

logging.critical('This is a critical error message')

如果把 your_level 设置为 logging.DEBUG,那么所有级别的日志信息都会显示出来。

想了解更多细节,可以查看 日志记录示例。

同样地,要为每个处理器(Handler)更改级别,可以使用 Handler.setLevel() 函数。

import logging
import logging.handlers

LOG_FILENAME = '/tmp/logging_rotatingfile_example.out'

# Set up a specific logger with our 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)

handler.setLevel(logging.CRITICAL)

my_logger.addHandler(handler)
153

我使用:

logger = logging.getLogger()
logger.disabled = True
... whatever you want ...
logger.disabled = False
247

我找到了解决办法:

logger = logging.getLogger('my-logger')
logger.propagate = False
# now if you use logger it will not log to console.

这个方法可以阻止日志信息被发送到上层的记录器,也就是包含控制台日志的那个记录器。

撰写回答