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

标签 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

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

我也在 https://docs.python.org/2/library/logging.config.html 中发现“如果您需要在日志配置中包含过滤器的实例,则需要使用 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())

添加 make ini 像:
[handler_error]
class=misc.testfm.ErrorHandler

关于Python日志记录为ini文件中的处理程序添加过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42926202/

相关文章:

python - 我无法使用 FIND_NEXT_SIBLING 而不是 PARENT 和 NEXT_ELEMENT 优化 beautifulsoup 查询

python - 如何在 Mac OSX 上将 python.h 放入我的 python virtualenv 中?

Python "here, . . . where"构造

css - 使用 CSS 将图像的一部分变灰

C# Dynamics CRM FilterExpression EntityReference

Python 和函数式语言互操作

testing - 去测试特定的文件输出

apache - 如何在日志文件中添加时间戳

powershell - 如何在 PowerShell 复制脚本中正确过滤多个字符串

python - 使用带有机器人框架的 python 根记录器