diff --git a/beaver/utils.py b/beaver/utils.py index 604cc058..80e59bbe 100644 --- a/beaver/utils.py +++ b/beaver/utils.py @@ -35,7 +35,7 @@ def parse_args(): parser = argparse.ArgumentParser(description='Beaver logfile shipper', epilog=epilog_example, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument('-c', '--configfile', help='ini config file path', dest='config', default='/dev/null') parser.add_argument('-C', '--confd-path', help='path to conf.d directory', dest='confd_path', default='/etc/beaver/conf.d') - parser.add_argument('-d', '--debug', help='enable debug mode', dest='debug', default=False, action='store_true') + parser.add_argument('-L', '--loglevel', help='set log level', dest='loglevel', default='info') parser.add_argument('-D', '--daemonize', help='daemonize in the background', dest='daemonize', default=False, action='store_true') parser.add_argument('-f', '--files', help='space-separated filelist to watch, can include globs (*.log). Overrides --path argument', dest='files', default=None, nargs='+') parser.add_argument('-F', '--format', help='format to use when sending to transport', default=None, dest='format', choices=['json', 'msgpack', 'raw', 'rawjson', 'string']) @@ -53,45 +53,35 @@ def parse_args(): def setup_custom_logger(name, args=None, output=None, formatter=None, debug=None): - logger = logging.getLogger(name) - logger.propagate = False - if logger.handlers: - logger.handlers = [] - - has_args = args is not None and type(args) == argparse.Namespace - if debug is None: - debug = has_args and args.debug is True + loglevel = logging.INFO + if args is not None and type(args) == argparse.Namespace: + loglevel = args.loglevel + if output is None: + output = args.output - if not logger.handlers: - if formatter is None: - formatter = logging.Formatter('[%(asctime)s] %(levelname)-7s %(message)s') + if type(loglevel) == str: + loglevel = loglevel.upper() - handler = logging.StreamHandler() - if output is None and has_args: - output = args.output + if formatter is None: + formatter = logging.Formatter('[%(asctime)s] %(levelname)-7s %(message)s') - if output: - output = os.path.realpath(output) + handlers = [] + handlers.append(logging.StreamHandler()) + if output: + handlers.append(logging.FileHandler(os.path.realpath(output))) - if output is not None: - file_handler = logging.FileHandler(output) - if formatter is not False: - file_handler.setFormatter(formatter) - logger.addHandler(file_handler) + logger = logging.getLogger(name) + logger.propagate = False + logger.handlers = [] + logger.setLevel(loglevel) + for handler in handlers: if formatter is not False: handler.setFormatter(formatter) - logger.addHandler(handler) - if debug: - logger.setLevel(logging.DEBUG) - if hasattr(logging, 'captureWarnings'): - logging.captureWarnings(True) - else: - logger.setLevel(logging.INFO) - if hasattr(logging, 'captureWarnings'): - logging.captureWarnings(False) + if hasattr(logging, 'captureWarnings'): + logging.captureWarnings(logging.getLevelName(logger.level)=='DEBUG') logger.debug('Logger level is {0}'.format(logging.getLevelName(logger.level)))