Python日志在ini文件中为处理程序添加过滤器?
我有一个log.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
[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