Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python日志模块中指定级别?_Python_Logging_Structlog - Fatal编程技术网

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

如何在python日志模块中指定级别?,python,logging,structlog,Python,Logging,Structlog,我需要两个接线员。一个用于文件记录,另一个用于控制台中的流记录。我需要为每个处理程序指定级别。请注意,我的级别将类似于以下级别 流处理程序-->信息 文件处理程序-->警告、错误、严重 这是我的密码 #创建自定义记录器 logger=logging.getLogger('DBMQ') logger.setLevel(logging.DEBUG) stream_handler=logging.StreamHandler() stream_handler.setLevel(logging.INFO)

我需要两个接线员。一个用于文件记录,另一个用于控制台中的流记录。我需要为每个处理程序指定级别。请注意,我的级别将类似于以下级别

流处理程序-->信息

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

这是我的密码

#创建自定义记录器
logger=logging.getLogger('DBMQ')
logger.setLevel(logging.DEBUG)
stream_handler=logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
logger.addHandler(流处理程序)
file\u handler=logging.FileHandler(“./data/file.log”)
文件\u handler.setLevel(logging.WARNING)
logger.addHandler(文件处理程序)
现在,它必须这样操作:

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

我需要禁止流处理程序记录
警告
错误
严重
日志记录级别。有什么方法可以筛选此处理程序吗?

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

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)
“级别”系统不能像禁用/启用单个“级别”一样工作。

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


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

代码的结果是什么?文件处理程序工作正常,但流处理程序记录最后三个级别。我只希望它只记录
INFO
级别。日志级别始终是最低级别。信息是指“日志信息或更高信息”。想要一个日志包含一些日志,但不包含一些更重要的日志的场景很难构建。@schwobasegll。我正在寻找一种方法来记录某个级别,但正如您所提到的,它可以记录一个级别或更高的级别。。!!谢谢它工作正常,但流处理程序仍会记录一条级别为
warning
的消息。现在,流处理程序的error和critical都被禁用了,这很好,正如您为我描述的那样。您对我的示例做了任何更改吗?我刚刚添加了我的文件处理程序。再次尝试,效果良好。谢谢。这是普通的方式吗?有没有办法将此类添加到
.conf
文件中?我想写一个配置文件并使用
fileConfig()
方法。