Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.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 - Fatal编程技术网

Python:日志处理程序仅日志级别日志小于错误

Python:日志处理程序仅日志级别日志小于错误,python,Python,我需要一种python记录器不记录错误或更高错误的方法。需要它只记录少于错误的日志 import logging from logging import StreamHandler def get_log_formatter(): datefmt = '%b %d %y %H:%M:%S' formatter = logging.Formatter('%(asctime)s [%(module)s:%(levelname)s] %(message)s',

我需要一种python记录器不记录错误或更高错误的方法。需要它只记录少于错误的日志

import logging
from logging import StreamHandler

def get_log_formatter():
    datefmt = '%b %d %y %H:%M:%S'
    formatter = logging.Formatter('%(asctime)s [%(module)s:%(levelname)s] %(message)s',
                          datefmt=datefmt)
    return formatter

class MyHandler(StreamHandler):
    def __init__(self, max_level, *args, **kwargs):
        super(MyHandler, self).__init__(*args, **kwargs)
        self.max_level = max_level
    def emit(self, record):
        if record.levelno >= self.max_level:
            return
        return super(MyHandler, self).emit(record)

handl = MyHandler(logging.ERROR)
handl.setLevel(logging.INFO)
handl.setFormatter(get_log_formatter())
logger = logging.getLogger("testing_logger")
logger.addHandler(handl)
logger.setLevel(logging.INFO)
这似乎有效,但有意义吗?有没有更好的方法过滤掉日志线

In [3]: logger_num = 0

In [4]: logger = remake()

In [5]: logger.info("Why")
May 16 01 16:50:10 [<ipython-input-5-c350362291ad>:INFO] Why

In [6]: logger.warn("Why")
May 16 01 16:50:13 [<ipython-input-6-56809439d5a4>:WARNING] Why

In [7]: logger.error("Why")

In [8]:
[3]中的
logger\u num=0
在[4]中:logger=remake()
[5]:logger.info(“为什么”)
五月16日01:16:50:10[:信息]为什么
在[6]中:logger.warn(“为什么”)
五月16日01:16:50:13[警告]为什么
在[7]中:logger.error(“为什么”)
在[8]中:

解决方案的后遗症是,您必须对要使用的每个处理程序进行子类化

上下文过滤器的用途更加明确:

class MaxFilter:
    def __init__(max_level):
        self.max_level = max_level

    def filter(self, record):
        if record.levelno < self.max_level:
            return True
any_concrete_handler.addFilter(MaxFilter(logging.INFO))