【问题标题】:Python logging add filter for handler in ini file?Python日志记录为ini文件中的处理程序添加过滤器?
【发布时间】:2017-03-21 11:45:27
【问题描述】:

我有一个这样的 log.ini:

[handler_info]
class=StreamHandler
level=INFO
formatter=fmt
filter=infofilter
args=(sys.stdout,)

[handler_error]
class=StreamHandler
level=ERROR
filter=errorfilter
formatter=fmt
args=(sys.stdout,)

[filter_infofilter]
class=util.testfm.InfoFilter

[filter_errorfilter]
class=util.testfm.ErrorFilter

但它不起作用。而且我不想为handler.addFilter(logging.Filter('foo')) 之类的处理程序动态添加过滤器

我的过滤器是这样的:

class InfoFilter(logging.Filter):

    def filter(self, rec):
        return rec.levelno <= logging.INFO


class ErrorFilter(logging.Filter):

    def filter(self, rec):
        return rec.levelno > logging.INFO

我想达到什么目标?我想使用一个记录器和两个不同的处理程序将不同级别的日志写入不同的文件。

我还在https://docs.python.org/2/library/logging.config.html 中找到“如果您需要在日志配置中包含 Filter 实例,则需要使用 dictConfig()”。

【问题讨论】:

    标签: python logging filter


    【解决方案1】:

    好像我只能做这样的事情:

    class InfoHandler(StreamHandler):
        def __init__(self, *args, **kwargs):
            StreamHandler.__init__(self, *args, **kwargs)
            self.addFilter(InfoFilter())
    
    
    class ErrorHandler(StreamHandler):
        def __init__(self, *args, **kwargs):
            StreamHandler.__init__(self, *args, **kwargs)
            self.addFilter(ErrorFilter())
    

    添加 make ini 喜欢:

    [handler_error]
    class=misc.testfm.ErrorHandler
    

    【讨论】:

      【解决方案2】:

      ErrorFilter 过滤掉级别为INFO 和更低级别的日志记录,因此它基本上将下限阈值设置为级别WARNING(这是INFO 之后的下一个级别)。

      对于较低的阈值,处理程序的level 字段应该可以工作:

      [handler_error]
      class=StreamHandler
      level=WARNING
      

      另一方面,InfoFilter 设置日志记录级别的上限阈值。那是你需要制作自定义处理程序的时候:

      class InfoHandler(StreamHandler):
          def __init__(self, *args, **kwargs):
              super(InfoHandler, self).__init__(*args, **kwargs)
              self.addFilter(InfoFilter())
      

      并配置处理程序以使用您的类:

      [handler_info]
      class=misc.testfm.InfoHandler
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-27
        • 1970-01-01
        • 2011-07-16
        • 1970-01-01
        • 1970-01-01
        • 2011-11-21
        • 2019-03-17
        • 1970-01-01
        相关资源
        最近更新 更多