def _main(args=None, namespace=None): # Set console logging first with some defaults, to prevent having exceptions # before hitting logging configuration. The defaults can/will get overridden # later. # Console Logger sh = logging.StreamHandler() sh.setFormatter(log.color_format()) sh.setLevel(logging.WARNING) # because we're in a module already, __name__ is not the ancestor of # the rest of the package; use the root as the logger for everyone root_logger = logging.getLogger() # allow all levels at root_logger, handlers control individual levels root_logger.setLevel(logging.DEBUG) root_logger.addHandler(sh) #构造命令解析器 parser = get_parser() if len(sys.argv) < 2: parser.print_help() sys.exit() else: #解析用户输入的参数,如果输入参数有误,将扔出异常 args = parser.parse_args(args=args, namespace=namespace) console_loglevel = logging.DEBUG # start at DEBUG for now if args.quiet: console_loglevel = logging.WARNING if args.verbose: console_loglevel = logging.DEBUG # Console Logger sh.setLevel(console_loglevel) # File Logger fh = logging.FileHandler( 'ceph-deploy-{cluster}.log'.format(cluster=args.cluster)) fh.setLevel(logging.DEBUG) fh.setFormatter(logging.Formatter(log.FILE_FORMAT)) root_logger.addHandler(fh) # Reads from the config file and sets values for the global # flags and the given sub-command # the one flag that will never work regardless of the config settings is # logging because we cannot set it before hand since the logging config is # not ready yet. This is the earliest we can do. args = ceph_deploy.conf.cephdeploy.set_overrides(args) LOG.info("Invoked (%s): %s" % (ceph_deploy.__version__, ' '.join(sys.argv))) log_flags(args) #处理对应的命令函数 return args.func(args)
def _main(args=None, namespace=None): # Set console logging first with some defaults, to prevent having exceptions # before hitting logging configuration. The defaults can/will get overridden # later. # Console Logger sh = logging.StreamHandler() sh.setFormatter(log.color_format()) sh.setLevel(logging.WARNING) # because we're in a module already, __name__ is not the ancestor of # the rest of the package; use the root as the logger for everyone root_logger = logging.getLogger() # allow all levels at root_logger, handlers control individual levels root_logger.setLevel(logging.DEBUG) root_logger.addHandler(sh) parser = get_parser() if len(sys.argv) < 2: parser.print_help() sys.exit() else: args = parser.parse_args(args=args, namespace=namespace) console_loglevel = logging.DEBUG # start at DEBUG for now if args.quiet: console_loglevel = logging.WARNING if args.verbose: console_loglevel = logging.DEBUG # Console Logger sh.setLevel(console_loglevel) # File Logger fh = logging.FileHandler('{cluster}.log'.format(cluster=args.cluster)) fh.setLevel(logging.DEBUG) fh.setFormatter(logging.Formatter(log.BASE_FORMAT)) root_logger.addHandler(fh) # Reads from the config file and sets values for the global # flags and the given sub-command # the one flag that will never work regardless of the config settings is # logging because we cannot set it before hand since the logging config is # not ready yet. This is the earliest we can do. args = ceph_deploy.conf.cephdeploy.set_overrides(args) LOG.info("Invoked (%s): %s" % ( ceph_deploy.__version__, join(sys.argv, " ")) ) log_flags(args) return args.func(args)
def main(args=None, namespace=None): parser = get_parser() if len(sys.argv) < 2: parser.print_help() sys.exit() else: args = parser.parse_args(args=args, namespace=namespace) console_loglevel = logging.DEBUG # start at DEBUG for now if args.quiet: console_loglevel = logging.WARNING if args.verbose: console_loglevel = logging.DEBUG # Console Logger sh = logging.StreamHandler() sh.setFormatter(log.color_format()) sh.setLevel(console_loglevel) # File Logger fh = logging.FileHandler('{cluster}.log'.format(cluster=args.cluster)) fh.setLevel(logging.DEBUG) fh.setFormatter(logging.Formatter(log.BASE_FORMAT)) # because we're in a module already, __name__ is not the ancestor of # the rest of the package; use the root as the logger for everyone root_logger = logging.getLogger() # allow all levels at root_logger, handlers control individual levels root_logger.setLevel(logging.DEBUG) root_logger.addHandler(sh) root_logger.addHandler(fh) # Reads from the config file and sets values for the global # flags and the given sub-command # the one flag that will never work regardless of the config settings is # logging because we cannot set it before hand since the logging config is # not ready yet. This is the earliest we can do. args = ceph_deploy.conf.cephdeploy.set_overrides(args) LOG.info("Invoked (%s): %s" % (ceph_deploy.__version__, join(sys.argv, " "))) return args.func(args)
def main(args=None, namespace=None): parser = get_parser() if len(sys.argv) < 2: parser.print_help() sys.exit() else: args = parser.parse_args(args=args, namespace=namespace) console_loglevel = logging.DEBUG # start at DEBUG for now if args.quiet: console_loglevel = logging.WARNING if args.verbose: console_loglevel = logging.DEBUG # Console Logger sh = logging.StreamHandler() sh.setFormatter(log.color_format()) sh.setLevel(console_loglevel) # File Logger fh = logging.FileHandler('{cluster}.log'.format(cluster=args.cluster)) fh.setLevel(logging.DEBUG) fh.setFormatter(logging.Formatter(log.BASE_FORMAT)) # because we're in a module already, __name__ is not the ancestor of # the rest of the package; use the root as the logger for everyone root_logger = logging.getLogger() # allow all levels at root_logger, handlers control individual levels root_logger.setLevel(logging.DEBUG) root_logger.addHandler(sh) root_logger.addHandler(fh) LOG.info("Invoked (%s): %s" %(ceph_deploy.__version__, join(sys.argv, " "))) return args.func(args)
def _main(args=None, namespace=None): # Set console logging first with some defaults, to prevent having exceptions # before hitting logging configuration. The defaults can/will get overridden # later. # Console Logger # 命令行控制台日志 sh = logging.StreamHandler() # 不同级别的日志,使用不同的颜色区别:DEBUG蓝色;WARNIN黄色;ERROR红色;INFO白色 sh.setFormatter(log.color_format()) # 设置日志级别为WARNING sh.setLevel(logging.WARNING) # because we're in a module already, __name__ is not the ancestor of # the rest of the package; use the root as the logger for everyone # root_logger日志 root_logger = logging.getLogger() # allow all levels at root_logger, handlers control individual levels # 设置root_logger日志级别为DEBUG root_logger.setLevel(logging.DEBUG) # 将 sh添加到root_logger root_logger.addHandler(sh) # 获取解析cli的argparse,调用argparse模块 parser = get_parser() if len(sys.argv) < 2: parser.print_help() sys.exit() else: # 解析获取sys.argv中的ceph-deploy子命令和参数 args = parser.parse_args(args=args, namespace=namespace) # 设置日志级别 console_loglevel = logging.DEBUG # start at DEBUG for now if args.quiet: console_loglevel = logging.WARNING if args.verbose: console_loglevel = logging.DEBUG # Console Logger sh.setLevel(console_loglevel) # File Logger # 文件日志 fh = logging.FileHandler( 'ceph-deploy-{cluster}.log'.format(cluster=args.cluster)) fh.setLevel(logging.DEBUG) fh.setFormatter(logging.Formatter(log.FILE_FORMAT)) # 将 fh添加到root_logger root_logger.addHandler(fh) # Reads from the config file and sets values for the global # flags and the given sub-command # the one flag that will never work regardless of the config settings is # logging because we cannot set it before hand since the logging config is # not ready yet. This is the earliest we can do. # 从~/.cephdeploy.conf(如果当前用户为root,就是/root/.cephdeploy.conf)获取ceph-deploy配置覆盖命令行参数,默认.cephdeploy.conf文件内容为空 args = ceph_deploy.conf.cephdeploy.set_overrides(args) LOG.info("Invoked (%s): %s" % (ceph_deploy.__version__, ' '.join(sys.argv))) log_flags(args) # args.func为cli中的subcmd子命令,调用相应的模块 return args.func(args)