Source code for tools.uniqueLogFilter

"""
.. module:: tools.uniqueLogFilter
   :synopsis: Contains a stolen code snippet for a logging filter to
       have identical log messages appear only once.

.. moduleauthor:: Wolfgang Waltenberger <wolfgang.waltenberger@gmail.com>

"""

import logging

[docs]class UniqueFilter(logging.Filter): """Messages are allowed through just once. The 'message' includes substitutions, but is not formatted by the handler. If it were, then practically all messages would be unique! stolen from: http://code.activestate.com/recipes/412552-using-the-logging-module/ """ def __init__(self, name=""): logging.Filter.__init__(self, name) self.reset()
[docs] def reset(self): """Act as if nothing has happened.""" self.__logged = {}
[docs] def filter(self, rec): """logging.Filter.filter performs an extra filter on the name.""" return logging.Filter.filter(self, rec) and self.__is_first_time(rec)
def __is_first_time(self, rec): """Emit a message only once.""" msg = rec.msg %(rec.args) if msg in self.__logged: self.__logged[msg] += 1 return False else: self.__logged[msg] = 1 return True