Cmds.py: Add early evaluation of --log-xxx

jwutils.log.set_flags() and .set_level() is not set until after all
commands are loaded. This can make debugging complicated. OTOH,
command-line parsing is also not done until all commands are loaded,
because they define the command line options. This commit adds some
poor man's command line parsing for fetching --log-level and
--log-flags only, and applying them before the commands are all
loaded.

Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2020-04-04 11:39:01 +02:00
commit e48fa1b00a

View file

@ -14,10 +14,26 @@ class Cmds: # export
self.__description = description self.__description = description
self.__filter = filter self.__filter = filter
self.__modules = modules self.__modules = modules
default_log_level = jwutils.log.NOTICE
default_log_flags = 'stderr,position,prio,color'
# poor man's parsing in the absence of a complete command-line definition
for i in range(1, len(sys.argv)):
if i >= len(sys.argv) - 1:
break
arg = sys.argv[i]
if arg == '--log-level':
i += 1
default_log_level = sys.argv[i]
continue
if arg == '--log-flags':
default_log_flags = sys.argv[i]
continue
jwutils.log.set_flags(default_log_flags)
jwutils.log.set_level(default_log_level)
self.__parser = argparse.ArgumentParser(usage=os.path.basename(sys.argv[0]) + ' [command] [options]', self.__parser = argparse.ArgumentParser(usage=os.path.basename(sys.argv[0]) + ' [command] [options]',
formatter_class=argparse.ArgumentDefaultsHelpFormatter, description=self.__description) formatter_class=argparse.ArgumentDefaultsHelpFormatter, description=self.__description)
self.__parser.add_argument('--log-flags', help='Log flags', default='stderr,position,prio,color') self.__parser.add_argument('--log-flags', help='Log flags', default=default_log_flags)
self.__parser.add_argument('--log-level', help='Log level', default=jwutils.log.NOTICE) self.__parser.add_argument('--log-level', help='Log level', default=default_log_level)
self.eloop = eloop self.eloop = eloop
self.__own_eloop = False self.__own_eloop = False
if eloop is None: if eloop is None:
@ -39,10 +55,9 @@ class Cmds: # export
cmd.add_parser(subparsers) cmd.add_parser(subparsers)
async def __run(self): async def __run(self):
#async def __run(self):
args = self.__parser.parse_args() args = self.__parser.parse_args()
jwutils.log.set_level(args.log_level)
jwutils.log.set_flags(args.log_flags) jwutils.log.set_flags(args.log_flags)
jwutils.log.set_level(args.log_level)
return await args.func(args) return await args.func(args)
def __del__(self): def __del__(self):