Python 日志记录——使用过滤器去除信息

标签 python logging

我试图在登录到控制台时删除一些信息,但在登录到文件时保留该信息

这是一个基本的例子:

import logging
import sys

class MyFilter(logging.Filter):
    def filter(self, record):
        record.msg = record.msg.replace("test", "")
        return True

logger = logging.getLogger("mylogger")
logger.setLevel(logging.DEBUG)

console = logging.StreamHandler(sys.stdout)
console.setLevel("INFO")
logger.addHandler(console)

logfile = logging.FileHandler("log.txt", 'w')
logfile.setLevel("ERROR")
logger.addHandler(logfile)

filt = MyFilter()
console.addFilter(filt)

logger.info("test one")
logger.error("test two")

我想在控制台上看到的是

one
two

然后在日志文件中

test two

但实际上只是

two

我假设编辑 LogRecord 是造成这种情况的原因。 有没有一种方法可以实现我想要的,或者我试图通过这种方式无法实现的?

最佳答案

我想你需要的是一个logging.Formatter:

class MyFormatter(logging.Formatter):   
    def format(self, record):
       return record.msg.replace("test", "")

#...
console.setFormatter(MyFormatter())
#...

关于Python 日志记录——使用过滤器去除信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16449411/

相关文章:

Python:文件编码错误

java - 新的日志文件没有生成?

windows - 如何识别通过远程桌面连接到 Windows 服务器的用户

objective-c - 使用自定义基数创建日志函数

python - Django Rest 框架 - API View 提示 NoneType 响应

python - 避免在 timeit.repeat() 基准测试中进行昂贵的设置

debugging - 如何在 Rust 中打印表达式及其值?

ruby - 动态更改 Ruby Logger 输出

python - Pandas Dataframe 使用 Groupby 从其他两列的唯一值创建下一个 future 日期的列

python - 数字中的下划线是什么意思?