Allow to filter out log messages by templates

Fixes #1594.
This commit is contained in:
Alexander Turenko 2016-09-12 03:01:22 +03:00
commit 1b1d1fd9f7
2 changed files with 21 additions and 4 deletions

View file

@ -777,6 +777,16 @@ be filtered out.
For example: ``[(logging.WARN, 'TAG_SAVE_AS is set to False')]`` For example: ``[(logging.WARN, 'TAG_SAVE_AS is set to False')]``
It is possible to filter out messages by a template. Check out source code to
obtain a template.
For example: ``[(logging.WARN, 'Empty alt attribute for image %s in %s')]``
**Warning:** Silencing messages by templates is a dangerous feature. It is
possible to unintentionally filter out multiple message types with the same
template (including messages from future Pelican versions). Proceed with
caution.
.. _reading_only_modified_content: .. _reading_only_modified_content:

View file

@ -92,6 +92,7 @@ class LimitFilter(logging.Filter):
""" """
_ignore = set() _ignore = set()
_raised_messages = set()
_threshold = 5 _threshold = 5
_group_count = defaultdict(int) _group_count = defaultdict(int)
@ -105,12 +106,18 @@ class LimitFilter(logging.Filter):
group_args = record.__dict__.get('limit_args', ()) group_args = record.__dict__.get('limit_args', ())
# ignore record if it was already raised # ignore record if it was already raised
# use .getMessage() and not .msg for string formatting message_key = (record.levelno, record.getMessage())
ignore_key = (record.levelno, record.getMessage()) if message_key in self._raised_messages:
if ignore_key in self._ignore:
return False return False
else: else:
self._ignore.add(ignore_key) self._raised_messages.add(message_key)
# ignore LOG_FILTER records
# use .msg and not .getMessage() for string formatting to allow
# filtering by templates
ignore_key = (record.levelno, record.msg)
if ignore_key in self._ignore:
return False
# check if we went over threshold # check if we went over threshold
if group: if group: