summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Mayer <entroP@gmail.com>2020-04-12 20:51:33 +0200
committerGitHub <noreply@github.com>2020-04-12 20:51:33 +0200
commit07c2526c0843751330d6c777a7f16460e9faa54c (patch)
tree13e6c955b06fc6048afd3d11003163a2cb2bd1be
parente7ef546661046a22f7c469186e1a97f98a6e8d24 (diff)
parent97dbafcb897d56c963ddf92543b1b1c3000c6240 (diff)
downloadpelican-07c2526c0843751330d6c777a7f16460e9faa54c.tar.gz
Merge pull request #2716 from avaris/limit-filter
Fix LOG_FILTER to act on exact messages
-rw-r--r--pelican/log.py8
-rw-r--r--pelican/tests/test_log.py78
2 files changed, 83 insertions, 3 deletions
diff --git a/pelican/log.py b/pelican/log.py
index bae15b4b..0576af2a 100644
--- a/pelican/log.py
+++ b/pelican/log.py
@@ -110,11 +110,13 @@ class LimitFilter(logging.Filter):
else:
self._raised_messages.add(message_key)
- # ignore LOG_FILTER records by templates when "debug" isn't enabled
+ # ignore LOG_FILTER records by templates or messages
+ # when "debug" isn't enabled
logger_level = logging.getLogger().getEffectiveLevel()
if logger_level > logging.DEBUG:
- ignore_key = (record.levelno, record.msg)
- if ignore_key in self._ignore:
+ template_key = (record.levelno, record.msg)
+ message_key = (record.levelno, record.getMessage())
+ if (template_key in self._ignore or message_key in self._ignore):
return False
# check if we went over threshold
diff --git a/pelican/tests/test_log.py b/pelican/tests/test_log.py
new file mode 100644
index 00000000..90a4552d
--- /dev/null
+++ b/pelican/tests/test_log.py
@@ -0,0 +1,78 @@
+import logging
+import unittest
+from collections import defaultdict
+
+from pelican import log
+from pelican.tests.support import LogCountHandler
+
+
+class TestLog(unittest.TestCase):
+ def setUp(self):
+ super().setUp()
+ self.logger = logging.getLogger(__name__)
+ self.handler = LogCountHandler()
+ self.logger.addHandler(self.handler)
+
+ def tearDown(self):
+ self._reset_limit_filter()
+ self.logger.removeHandler(self.handler)
+ super().tearDown()
+
+ def _reset_limit_filter(self):
+ log.LimitFilter._ignore = set()
+ log.LimitFilter._raised_messages = set()
+ log.LimitFilter._threshold = 5
+ log.LimitFilter._group_count = defaultdict(int)
+
+ def test_log_filter(self):
+ def do_logging():
+ for i in range(5):
+ self.logger.warning('Log %s', i)
+ self.logger.warning('Another log %s', i)
+ # no filter
+ do_logging()
+ self.assertEqual(
+ self.handler.count_logs('Log \\d', logging.WARNING),
+ 5)
+ self.assertEqual(
+ self.handler.count_logs('Another log \\d', logging.WARNING),
+ 5)
+ self.handler.flush()
+ self._reset_limit_filter()
+
+ # filter by template
+ log.LimitFilter._ignore.add((logging.WARNING, 'Log %s'))
+ do_logging()
+ self.assertEqual(
+ self.handler.count_logs('Log \\d', logging.WARNING),
+ 0)
+ self.assertEqual(
+ self.handler.count_logs('Another log \\d', logging.WARNING),
+ 5)
+ self.handler.flush()
+ self._reset_limit_filter()
+
+ # filter by exact message
+ log.LimitFilter._ignore.add((logging.WARNING, 'Log 3'))
+ do_logging()
+ self.assertEqual(
+ self.handler.count_logs('Log \\d', logging.WARNING),
+ 4)
+ self.assertEqual(
+ self.handler.count_logs('Another log \\d', logging.WARNING),
+ 5)
+ self.handler.flush()
+ self._reset_limit_filter()
+
+ # filter by both
+ log.LimitFilter._ignore.add((logging.WARNING, 'Log 3'))
+ log.LimitFilter._ignore.add((logging.WARNING, 'Another log %s'))
+ do_logging()
+ self.assertEqual(
+ self.handler.count_logs('Log \\d', logging.WARNING),
+ 4)
+ self.assertEqual(
+ self.handler.count_logs('Another log \\d', logging.WARNING),
+ 0)
+ self.handler.flush()
+ self._reset_limit_filter()