import logging import random import sys MIN_LENGTH = 5 FIRST_LETTER = 'a' MESSAGES = ['ant', 'antler', 'bear', 'berry'] logger = logging.getLogger('filter.test') # use root default of WARNING logger.addHandler(logging.NullHandler()) # we don't want emission of messages to be measured def lengthFilterFunction(record): return len(record.getMessage()) > MIN_LENGTH class FirstLetterFilter(object): def filter(self, record): message = record.getMessage() return message and message[0].lower() == FIRST_LETTER allowed = ['none', 'all'] def arg_error_exit(): print(f'use one of {allowed} as an argument, followed by # of log messages to create') sys.exit(1) def main(): if len(sys.argv) < 3: arg_error_exit() try: option = allowed.index(sys.argv[1].lower()) # 0 (none) is falsy, 1 (all) is truthy except: arg_error_exit() if option: _ = logging.Filter('filter') # should be applied automatically by namespace rules logger.addFilter(lengthFilterFunction) logger.addFilter(FirstLetterFilter()) num_messages = int(sys.argv[2]) random.seed(420) numeric_msg = (True, False) for i in range(num_messages): if random.choice(numeric_msg): logger.warning('Number %s', i) else: logger.warning(random.choice(MESSAGES)) if __name__ == '__main__': main()