forked from github/pelican
75 lines
2.5 KiB
Python
75 lines
2.5 KiB
Python
import logging
|
|
import unittest
|
|
from collections import defaultdict
|
|
from contextlib import contextmanager
|
|
|
|
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()
|
|
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)
|
|
|
|
@contextmanager
|
|
def reset_logger(self):
|
|
try:
|
|
yield None
|
|
finally:
|
|
self._reset_limit_filter()
|
|
self.handler.flush()
|
|
|
|
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
|
|
with self.reset_logger():
|
|
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
|
|
)
|
|
|
|
# filter by template
|
|
with self.reset_logger():
|
|
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
|
|
)
|
|
|
|
# filter by exact message
|
|
with self.reset_logger():
|
|
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
|
|
)
|
|
|
|
# filter by both
|
|
with self.reset_logger():
|
|
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
|
|
)
|