如何在python日志记录模块中指定级别?

时间:2020-10-09 12:39:12

标签: python logging structlog

我需要两个处理程序。一个用于文件记录,另一个用于流记录。我需要为每个处理程序指定级别。请注意,我的水平将类似于以下水平。

流处理程序->信息

文件处理程序->警告,错误,严重

这是我的代码。

    # Create a custom logger
    logger = logging.getLogger('DBMQ')
    logger.setLevel(logging.DEBUG)

    stream_handler = logging.StreamHandler()
    stream_handler.setLevel(logging.INFO)

    logger.addHandler(stream_handler)

    file_handler = logging.FileHandler('./data/file.log')
    file_handler.setLevel(logging.WARNING)

    logger.addHandler(file_handler)

现在,它必须像这样操作:

logger.debug('hey') # Nothing should happen
logger.info('hey') # only stream handler should log this message
logger.warning('hey') # only file handler should log this message but the stream does too
logger.error('hey') # only file handler should log this message but the stream does too
logger.critical('hey') # only file handler should log this message but the stream does too

我需要禁止流处理程序记录warningerrorcritical记录级别。有什么办法可以过滤此处理程序?

2 个答案:

答案 0 :(得分:2)

您可以创建自己的处理程序:

logger = logging.getLogger('DBMQ')
logger.setLevel(logging.DEBUG)


class MyStreamHandler(logging.StreamHandler):
    def emit(self, record):
        if record.levelno == self.level:
            super().emit(record)

stream_handler = MyStreamHandler()
stream_handler.setLevel(logging.INFO)

logger.addHandler(stream_handler)

file_handler = logging.FileHandler('./data/file.log')
file_handler.setLevel(logging.WARNING)

logger.addHandler(file_handler)

答案 1 :(得分:0)

“级别”系统不能用作禁用/启用单个“级别”。 https://docs.python.org/3/library/logging.html#logging-levels

“级别”是单个整数值。如果消息的级别超过记录器/处理程序级别,则会显示该消息。就这么简单。

如果您需要其他逻辑,唯一的方法是实现自己的处理程序。

相关问题