【问题标题】:How to avoid bloated log files in Python?如何避免 Python 中臃肿的日志文件?
【发布时间】:2019-09-17 03:44:47
【问题描述】:

我的脚本每 5 秒执行一次。错误记录到文件中。这意味着,如果出现错误,日志文件每 5 秒就会因相同的错误而膨胀

while True:
    try:
        i_might_fail()   # As long as this line fails...
    except Exception as ex:
        logger.error(ex) # ... the log file gets bloated
    time.sleep(5)

无法终止脚本。它必须每 5 秒重试一次。

我正在寻找一种日志功能来在 x 分钟内忽略相同的异常

logger.ignore_duplicates_for(10, 'minutes')

有什么想法吗? 提前致谢!

【问题讨论】:

    标签: python python-3.x exception logging


    【解决方案1】:

    这个功能可以这样实现:

    import logging
    import time
    import datetime
    
    logger = logging.getLogger(__file__)
    
    
    TIMEDELTA = datetime.timedelta(seconds=5)
    
    
    def error_without_duplicates(self, msg, *args, **kwargs):
        if not hasattr(self, 'msg_cache'):
            self.msg_cache = {}
        str_msg = str(msg)
        now = datetime.datetime.utcnow()
        if str_msg not in self.msg_cache:
            self.error(msg, *args, **kwargs)
            self.msg_cache[str_msg] = now
        elif now - self.msg_cache[str_msg] > TIMEDELTA:
            self.error(msg, *args, **kwargs)
            self.msg_cache[str_msg] = now
    
    
    logging.Logger.error_without_duplicates = error_without_duplicates
    
    
    while True:
        try:
            a = 1 /0
        except Exception as ex:
            logger.error_without_duplicates(ex)  # every 5 seconds, not 1
        time.sleep(1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 2011-02-25
      • 2014-12-30
      • 1970-01-01
      • 2015-09-09
      • 1970-01-01
      • 2015-03-17
      相关资源
      最近更新 更多