diff options
author | Justin Mayer <entroP@gmail.com> | 2020-04-12 20:51:33 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-12 20:51:33 +0200 |
commit | 07c2526c0843751330d6c777a7f16460e9faa54c (patch) | |
tree | 13e6c955b06fc6048afd3d11003163a2cb2bd1be | |
parent | e7ef546661046a22f7c469186e1a97f98a6e8d24 (diff) | |
parent | 97dbafcb897d56c963ddf92543b1b1c3000c6240 (diff) | |
download | pelican-07c2526c0843751330d6c777a7f16460e9faa54c.tar.gz |
Merge pull request #2716 from avaris/limit-filter
Fix LOG_FILTER to act on exact messages
-rw-r--r-- | pelican/log.py | 8 | ||||
-rw-r--r-- | pelican/tests/test_log.py | 78 |
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() |