Python中loguru中add的filter的用法
时间: 2023-10-07 20:10:24 浏览: 68
`loguru`库中的`add`方法可以用来添加一个输出器,其中`filter`参数是用来设置日志过滤器的。过滤器是一种机制,用于决定哪些日志记录应该被输出,哪些不应该被输出。
`filter`参数可以接受一个字符串或一个可调用对象,用于过滤日志记录。如果传递一个字符串参数,那么只有符合该字符串的logger名称才会被输出,例如:
```python
from loguru import logger
logger.add("file_{time}.log", filter="my_module", level="INFO")
logger.info("This message will be logged") # 输出日志
logger.bind(user="Alice").info("This message will also be logged") # 输出日志
logger.bind(user="Bob").info("This message will not be logged") # 不输出日志
```
这段代码中,只有符合`my_module`名称的logger才会被输出,因此前两个日志记录会被输出到文件中,而第三个日志记录则不会被输出。
如果传递的是一个可调用对象,那么该对象会接受一个`record`参数,该参数包含了当前日志记录的所有信息,可以根据这些信息来决定是否输出该日志记录。
下面是一个自定义过滤器的示例:
```python
from loguru import logger
def my_filter(record):
return "Alice" in record["extra"].values()
logger.add("file_{time}.log", filter=my_filter, level="INFO")
logger.info("This message will not be logged") # 不输出日志
logger.bind(user="Alice").info("This message will be logged") # 输出日志
logger.bind(user="Bob").info("This message will not be logged") # 不输出日志
```
这段代码中,自定义了一个过滤器函数`my_filter`,该函数接受一个`record`参数,判断该参数中的`extra`属性中是否包含`"Alice"`,如果包含则返回`True`,否则返回`False`。在`add`方法中传递了该过滤器函数,因此只有包含`"Alice"`的日志记录才会被输出。