Merge pull request #1594 from Totktonada/feature/log-filter-by-templates

LOG_FILTER cannot be used with '%s'ed messages
This commit is contained in:
Justin Mayer 2016-09-23 14:06:28 -06:00 committed by GitHub
commit 98398e0420
2 changed files with 23 additions and 4 deletions

View file

@ -777,6 +777,18 @@ 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.
Note: This option does nothing ``--debug`` is passed.
.. _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 by templates 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:
return False
# check if we went over threshold # check if we went over threshold
if group: if group: