terom@0: """ terom@0: CLI argument handling; common stuff: logging terom@0: """ terom@0: terom@0: import optparse terom@0: import logging terom@0: terom@0: def parser (parser) : terom@0: """ terom@0: Return an optparse.OptionGroup. terom@0: """ terom@0: terom@0: general = optparse.OptionGroup(parser, "General options") terom@0: terom@0: general.add_option('-q', '--quiet', dest='loglevel', action='store_const', const=logging.ERROR, help="Less output") terom@0: general.add_option('-v', '--verbose', dest='loglevel', action='store_const', const=logging.INFO, help="More output") terom@0: general.add_option('-D', '--debug', dest='loglevel', action='store_const', const=logging.DEBUG, help="Even more output") terom@0: general.add_option('--debug-module', action='append', metavar='MODULE', terom@0: help="Enable logging for the given logger/module name") terom@0: terom@0: # defaults terom@0: parser.set_defaults( terom@0: logname = parser.prog, terom@0: loglevel = logging.WARN, terom@0: debug_module = [], terom@0: ) terom@0: terom@0: return general terom@0: terom@0: def apply (options, logname=None) : terom@0: """ terom@0: Apply the optparse options. terom@0: """ terom@0: terom@0: if logname : terom@0: prefix = options.logname + ': ' terom@0: else : terom@0: prefix = '' terom@0: terom@0: # configure terom@0: logging.basicConfig( terom@0: # XXX: log Class.__init__ as Class, not __init__? terom@0: format = prefix + '%(name)-20s: %(levelname)5s %(funcName)s: %(message)s', terom@0: level = options.loglevel, terom@0: ) terom@0: terom@0: # enable debugging for specific targets terom@0: for logger in options.debug_module : terom@0: logging.getLogger(logger).setLevel(logging.DEBUG) terom@0: