Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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日志在ini文件中为处理程序添加过滤器?_Python_Logging_Filter - Fatal编程技术网

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

Python日志在ini文件中为处理程序添加过滤器?,python,logging,filter,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.te

我有一个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
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
但它不起作用。我不想为处理程序动态添加过滤器,比如
handler.addFilter(logging.filter('foo'))

我的过滤器如下所示:

[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
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
class信息过滤器(logging.Filter):
def过滤器(自身、rec):
返回rec.levelno logging.INFO
我想要实现什么?我想使用一个记录器和两个不同的处理程序将不同级别的日志写入不同的文件


我还发现“如果您需要在日志记录配置中包含筛选器实例,则需要使用dictConfig()”。

似乎我只能执行以下操作:

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())
添加makeini,如下所示:

[handler_error]
class=misc.testfm.ErrorHandler

似乎我只能做这样的事情:

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())
添加makeini,如下所示:

[handler_error]
class=misc.testfm.ErrorHandler

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

对于较低的阈值,处理程序的
级别
字段应适用:

[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

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

对于较低的阈值,处理程序的
级别
字段应适用:

[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