55import traceback
66import logging
77
8+ from pathlib import Path
89from pprint import pformat
910
1011from . import (
1415)
1516from .pin_lock import PinCommand
1617
17-
18- logging .basicConfig (stream = sys .stdout , level = logging .INFO )
19-
20-
2118class UnexpectedError (ChipFlowError ):
2219 pass
2320
21+ log_level = logging .WARNING
2422
2523def run (argv = sys .argv [1 :]):
2624 config = _parse_config ()
@@ -43,10 +41,15 @@ def run(argv=sys.argv[1:]):
4341 parser .add_argument (
4442 "--verbose" , "-v" ,
4543 dest = "log_level" ,
46- action = "append_const " ,
47- const = 10 ,
44+ action = "count " ,
45+ default = 0 ,
4846 help = "increase verbosity of messages; can be supplied multiple times to increase verbosity"
4947 )
48+ parser .add_argument (
49+ "--log-file" , help = argparse .SUPPRESS ,
50+ default = None , action = "store"
51+ )
52+
5053
5154 command_argument = parser .add_subparsers (dest = "command" , required = True )
5255 for command_name , command in commands .items ():
@@ -57,12 +60,27 @@ def run(argv=sys.argv[1:]):
5760 raise ChipFlowError (f"Encountered error while building CLI argument parser for "
5861 f"step `{ command_name } `" )
5962
60- # each verbose flag increases versbosity (e.g. -v -v, -vv, --verbose --verbose)
61- # cute trick using append_const and summing
6263 args = parser .parse_args (argv )
63- if args .log_level :
64- log_level = max (logging .DEBUG , logging .WARNING - sum (args .log_level ))
65- logging .getLogger ().setLevel (log_level )
64+ global log_level
65+ log_level = max (logging .WARNING - args .log_level * 10 , 0 )
66+ logging .getLogger ().setLevel (logging .NOTSET )
67+
68+ # Add stdout handler, with level as set
69+ console = logging .StreamHandler (sys .stdout )
70+ console .setLevel (log_level )
71+ formatter = logging .Formatter ('%(name)-13s: %(levelname)-8s %(message)s' )
72+ console .setFormatter (formatter )
73+ logging .getLogger ().addHandler (console )
74+
75+ #Log to file with DEBUG level
76+ if args .log_file :
77+ filename = Path (args .log_file ).absolute ()
78+ print (f"> Logging to { str (filename )} " )
79+ fh = logging .FileHandler (filename )
80+ fh .setLevel (logging .DEBUG )
81+ formatter = logging .Formatter ('%(asctime)s - %(name)s - %(levelname)s - %(message)s' )
82+ fh .setFormatter (formatter )
83+ logging .getLogger ().addHandler (fh )
6684
6785 try :
6886 try :
0 commit comments