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')]``
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:

View file

@ -92,6 +92,7 @@ class LimitFilter(logging.Filter):
"""
_ignore = set()
_raised_messages = set()
_threshold = 5
_group_count = defaultdict(int)
@ -105,12 +106,18 @@ class LimitFilter(logging.Filter):
group_args = record.__dict__.get('limit_args', ())
# ignore record if it was already raised
# use .getMessage() and not .msg for string formatting
ignore_key = (record.levelno, record.getMessage())
if ignore_key in self._ignore:
message_key = (record.levelno, record.getMessage())
if message_key in self._raised_messages:
return False
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
if group: