【问题标题】:python logger limit string sizepython 记录器限制字符串大小
【发布时间】:2022-01-09 11:12:46
【问题描述】:

Python 记录器库 -

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

示例:

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

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

【问题讨论】:

  • 你可以截断export,即logging.info(f'result: {export[:20]}')

标签: python python-3.x logging


【解决方案1】:

使用自定义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...

【讨论】:

  • 成功了,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
  • 2012-10-25
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 2018-11-19
相关资源
最近更新 更多