diff --git a/zerver/lib/logging_util.py b/zerver/lib/logging_util.py index 0e42c1af24..79630ecdd5 100644 --- a/zerver/lib/logging_util.py +++ b/zerver/lib/logging_util.py @@ -1,6 +1,8 @@ from __future__ import absolute_import +import hashlib import logging +import traceback from datetime import datetime, timedelta # Adapted http://djangosnippets.org/snippets/2242/ by user s29 (October 25, 2010) @@ -26,9 +28,11 @@ class _RateLimitFilter(object): use_cache = False if use_cache: - key = self.__class__.__name__.upper() + tb = '\n'.join(traceback.format_exception(*record.exc_info)) + key = self.__class__.__name__.upper() + hashlib.sha1(tb).hexdigest() duplicate = cache.get(key) == 1 - cache.set(key, 1, rate) + if not duplicate: + cache.set(key, 1, rate) else: min_date = datetime.now() - timedelta(seconds=rate) duplicate = (self.last_error >= min_date)