python 记录器限制字符串大小

python logger limit string size

Python 记录器库 -

嘿,有没有办法限制字符串大小,如果超过最大限制,return 另一个字符串? 我有一个日志文件最大大小设置,但它不符合需要,因为记录器有时会收到一个 base64 的日志,这使得终端中的所有日志记录都无用。

示例:

export = '<Base64 Long String>'
logger.info(f'result: {export}')

由于代码是一个大项目的一部分,我不能在函数本身更改它,有没有办法在记录器级别设置它?

使用自定义 logging.Formatter

import logging

class NotTooLongStringFormatter(logging.Formatter):

    def __init__(self, max_length=10):
        super(NotTooLongStringFormatter, self).__init__()
        self.max_length = max_length

    def format(self, record):
        if len(record.msg) > self.max_length:
            record.msg = record.msg[:self.max_length] + "..."
        return super().format(record)
LOG = logging.getLogger("mylogger")

h = logging.StreamHandler()
h.setFormatter(NotTooLongStringFormatter(20))
LOG.addHandler(h)

LOG.error("a" * 10)  # aaaaaaaaaa
LOG.info("a" * 100)  # aaaaaaaaaaaaaaaaaaaa...

要保留具有特定格式的详细日志,只需将其传递给 super.__init__

def __init__(self, max_length=10):
    fmt = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    super(NotTooLongStringFormatter, self).__init__(fmt)
    self.max_length = max_length


2022-01-09 12:29:44,862 - mylogger - WARNING - aaaaaaaaaa
2022-01-09 12:29:44,863 - mylogger - WARNING - aaaaaaaaaaaaaaaaaaaa...