+class OnlyNTimesFilter(logging.Filter):
+ """
+ A filter that only logs messages from a given site with the same
+ message at the same logging level N times and ignores subsequent
+ attempts to log.
+
+ """
+ def __init__(self, maximum: int) -> None:
+ self.maximum = maximum
+ self.counters = collections.Counter()
+ super().__init__()
+
+ def filter(self, record: logging.LogRecord) -> bool:
+ source = f'{record.pathname}+{record.lineno}+{record.levelno}+{record.msg}'
+ count = self.counters[source]
+ self.counters[source] += 1
+ return count < self.maximum
+
+