我试图在登录到控制台时删除一些信息,但在登录到文件时保留该信息
这是一个基本的例子:
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/