覆盖Python中的logging.Formatter

时间:2012-02-21 13:54:39

标签: python logging formatting

我创建了一个覆盖一些字符串的覆盖格式化程序:

class MaskFormatter(logging.Formatter):

    def __init__(self, fmt, mask):
        logging.Formatter.__init__(self, fmt, mask)
        self.mask = mask

    def format(self, record):
        result = logging.Formatter.format(self, record)
        if result is not None and result.find(self.mask) != -1:
            result = result.replace(self.mask, '*' * len(self.mask))
        return result    

我这样用:

formatter = MaskFormatter('%(asctime)s %(levelname)s' + 
    ' %(module)s %(lineno)d %(message)s', mask='abcde')
hdlr.setLevel(logging.DEBUG)
logger.setLevel(logging.DEBUG)
hdlr.setFormatter(formatter)

然而在我的日志行中,我注意到日期时间现在也被掩盖了!!虽然我曾要求它只掩盖“abcde”,有人可以帮忙吗?

所有日志行都有前缀*****而不是真正的日期时间:

***** DEBUG mail

1 个答案:

答案 0 :(得分:3)

查看日志格式化程序的文档,它说Formatter有两个可选参数。第一种是消息格式,第二种是日期时间格式。看起来您正在以日期时间格式发送掩码。尝试从logging.Formatter中删除mask参数。 init 调用。