Skip to content

Instantly share code, notes, and snippets.

@ievans3024
Created May 8, 2018 13:29
Show Gist options
  • Select an option

  • Save ievans3024/4bbc63643ac197135a308c36220f9928 to your computer and use it in GitHub Desktop.

Select an option

Save ievans3024/4bbc63643ac197135a308c36220f9928 to your computer and use it in GitHub Desktop.
Logging verbosity control with a single argument
"""
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