Python日志为ini文件中的处理程序添加过滤器?

时间:2017-03-21 11:45:27

标签: python logging filter

我有一个像这样的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

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

我发现&#34;如果您需要在日志记录配置中包含Filter实例,则需要使用dictConfig()&#34;在https://docs.python.org/2/library/logging.config.html

2 个答案:

答案 0 :(得分:0)

好像我只能这样做:

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

答案 1 :(得分:0)

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

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

{{1}}