Created
May 8, 2018 13:29
-
-
Save ievans3024/4bbc63643ac197135a308c36220f9928 to your computer and use it in GitHub Desktop.
Logging verbosity control with a single argument
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| """ | |
| A demonstration of how to control stdout verbosity with argparse and logging. | |
| Examples of running this file and its expected output: | |
| $ python verbosity.py | |
| CRITICAL :: A critical message. | |
| $ python verbosity.py -v | |
| CRITICAL :: A critical message. | |
| ERROR :: An error message. | |
| $ python verbosity.py -vv | |
| CRITICAL :: A critical message. | |
| ERROR :: An error message. | |
| WARNING :: A warning message. | |
| $ python verbosity.py -vvv | |
| CRITICAL :: A critical message. | |
| ERROR :: An error message. | |
| WARNING :: A warning message. | |
| INFO :: An info message. | |
| $ python verbosity.py -vvvv | |
| CRITICAL :: A critical message. | |
| ERROR :: An error message. | |
| WARNING :: A warning message. | |
| INFO :: An info message. | |
| DEBUG :: A debug message. | |
| """ | |
| import argparse | |
| import logging | |
| stream_formatter = logging.Formatter(fmt='%(level) :: %(message)s') | |
| stream_handler = logging.StreamHandler() | |
| stream_handler.setFormatter(stream_formatter) | |
| logger = logging.getLogger('verbosity') | |
| logger.addHandler(stream_handler) | |
| parser = argparse.ArgumentParser(prog='verbosity') | |
| parser.add_argument('-v', dest='log_level', action='count', help='Increase verbosity of stdout messages') | |
| if __name__ == '__main__': | |
| args = parser.parse_args() | |
| # a custom log level with a value higher than critical | |
| # could be created for a "SILENT" level, but for the | |
| # sake of demonstration, default logging levels are used | |
| effective_log_level = logging.CRITICAL | |
| level = args.log_level or 0 | |
| # the following numbers may change depending on how log levels are set up | |
| modifier = level * 10 | |
| if modifier > 40: | |
| modifier = 40 | |
| effective_level = effective_level - modifier | |
| logger.setLevel(effective_level) | |
| logger.critical('A critical message.') | |
| logger.error('An error message.') | |
| logger.warn('A warning message.') | |
| logger.info('An info message.') | |
| logger.debug('A debug message.') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment