当前位置: 首页 > 面试题库 >

用过滤器记录

储毅
2023-03-14
问题内容

我正在使用日志记录(import logging)记录消息。

在1个单一模块中,我正在调试级别记录消息my_logger.debug('msg')

其中一些调试消息来自于function_a()其他消息function_b(); 我希望能够基于它们是来自a还是来自b来启用/禁用日志记录;

我猜想我必须使用日志记录的过滤机制。

有人可以告诉我下面的代码如何被执行我想要的工作吗?

import logging
logger = logging.getLogger( "module_name" )

def function_a( ... ):
    logger.debug( "a message" )

def function_b( ... ):
    logger.debug( "another message" )

if __name__ == "__main__":
    logging.basicConfig( stream=sys.stderr, level=logging.DEBUG )

    #don't want function_a()'s noise -> ....
    #somehow filter-out function_a's logging
    function_a()

    #don't want function_b()'s noise -> ....
    #somehow filter-out function_b's logging
    function_b()

如果将这个简单的示例扩展到更多模块和每个模块更多的功能,我会担心很多记录器;

是否可以将每个模块的记录器数量限制为1个?请注意,日志消息是“结构化的”,即,如果记录日志的函数正在执行某些解析工作,则它们都包含一个前缀logger.debug("parsing: xxx")-我能以单行方式关闭所有“解析”消息(无论发出消息的模块/功能?)


问题答案:

只需实现一个子类logging.Filter:http : //docs.python.org/library/logging.html#filter-
objects
。它有一种方法,filter(record)它检查日志记录并返回True进行记录或False丢弃。然后,您可以通过调用其方法在aLogger或a上安装过滤器。Handler``addFilter(filter)

例:

class NoParsingFilter(logging.Filter):
    def filter(self, record):
        return not record.getMessage().startswith('parsing')

logger.addFilter(NoParsingFilter())

还是这样的。



 类似资料:
  • 过滤器是 控制器动作 执行之前或之后执行的对象。 例如访问控制过滤器可在动作执行之前来控制特殊终端用户是否有权限执行动作, 内容压缩过滤器可在动作执行之后发给终端用户之前压缩响应内容。 过滤器可包含预过滤(过滤逻辑在动作之前)或后过滤(过滤逻辑在动作之后), 也可同时包含两者。 使用过滤器 过滤器本质上是一类特殊的 行为, 所以使用过滤器和 使用行为一样。 可以在控制器类中覆盖它的 behavio

  • 请你再一次回顾这张图: 一个 HTTP 请求,过滤器是第一组被执行的对象。同适配器不同的是,一个请求中,可以执行多个过滤器。 如何使用过滤器? 通过 @Filters 注解。 注解 '@Filters' 的值是一个 '@By' 注解的数组,它可以声明在这三个地方 入口函数 子模块 主模块 其中入口函数的 @Filters 优先级更高,其次是子模块,最后是主模块。 就是说,你在入口模块声明了两个过滤

  • 过滤器前缀 :, 比如 :markdown 会把下面块里的文本交给专门的函数进行处理。查看顶部 特性 里有哪些可用的过滤器。 body :markdown Woah! jade _and_ markdown, very **cool** we can even link to [stuff](http://google.com) 渲染为: <body><p>Woah! j

  • 过滤器本质上是可以应用于变量的函数。它们用管道操作符(|)调用,并且可以接受参数。 {{ foo | title }} {{ foo | join(",") }} {{ foo | replace("foo", "bar") | capitalize }} 定义一个新的过滤器 可以在过滤器的入口自定义函数来扩展过滤器。 过滤器函数将要过滤的内容作为第一个参数,并应返回新内容。 参考上下文API了

  • Filters are special post-processors that modify expanded abbreviation right before output to the editor. To better understand how filters work, let’s walk through a simple tutorial. 过滤器在输出发给编辑器之前修改缩写的

  • 问题内容: 我正在尝试获取最新的Django模型对象,但似乎无法成功。 这些都不起作用: 问题答案: