|
16 | 16 | log = logging.getLogger("codebasin")
|
17 | 17 | version = "1.2.0"
|
18 | 18 |
|
| 19 | +_traceback = False |
| 20 | + |
19 | 21 |
|
20 | 22 | def _help_string(*lines: str, is_long=False, is_last=False):
|
21 | 23 | """
|
@@ -89,6 +91,14 @@ def _main():
|
89 | 91 | default=0,
|
90 | 92 | help=_help_string("Decrease verbosity level."),
|
91 | 93 | )
|
| 94 | + parser.add_argument( |
| 95 | + "--debug", |
| 96 | + dest="debug", |
| 97 | + action="store_const", |
| 98 | + default=False, |
| 99 | + const=True, |
| 100 | + help=_help_string("Enable debug output."), |
| 101 | + ) |
92 | 102 | parser.add_argument(
|
93 | 103 | "-R",
|
94 | 104 | "--report",
|
@@ -152,23 +162,35 @@ def _main():
|
152 | 162 | # Configure logging such that:
|
153 | 163 | # - All messages are written to a log file
|
154 | 164 | # - Only errors are written to the terminal by default
|
155 |
| - # - Messages written to terminal are based on -q and -v flags |
| 165 | + # - Messages written to terminal are based on -q, -v and --debug flags |
156 | 166 | # - Meta-warnings and statistics are generated by a WarningAggregator
|
157 | 167 | aggregator = WarningAggregator()
|
158 | 168 | log.setLevel(logging.DEBUG)
|
| 169 | + if args.debug: |
| 170 | + min_log_level = logging.DEBUG |
| 171 | + global _traceback |
| 172 | + _traceback = True |
| 173 | + else: |
| 174 | + min_log_level = logging.INFO |
159 | 175 |
|
160 | 176 | file_handler = logging.FileHandler("cbi.log", mode="w")
|
161 |
| - file_handler.setLevel(logging.INFO) |
| 177 | + file_handler.setLevel(min_log_level) |
162 | 178 | file_handler.setFormatter(Formatter())
|
163 | 179 | file_handler.addFilter(aggregator)
|
164 | 180 | log.addHandler(file_handler)
|
165 | 181 |
|
| 182 | + if args.debug: |
| 183 | + log.debug(f"Code Base Investigator {version}; Python {sys.version}") |
| 184 | + |
166 | 185 | # Inform the user that a log file has been created.
|
167 | 186 | # 'print' instead of 'log' to ensure the message is visible in the output.
|
168 | 187 | log_path = os.path.abspath("cbi.log")
|
169 | 188 | print(f"Log file created at {log_path}")
|
170 | 189 |
|
171 |
| - log_level = max(1, logging.ERROR - 10 * (args.verbose - args.quiet)) |
| 190 | + log_level = max( |
| 191 | + min_log_level, |
| 192 | + logging.ERROR - 10 * (args.verbose - args.quiet), |
| 193 | + ) |
172 | 194 | stdout_handler = logging.StreamHandler(sys.stdout)
|
173 | 195 | stdout_handler.setLevel(log_level)
|
174 | 196 | stdout_handler.setFormatter(Formatter(colors=sys.stdout.isatty()))
|
@@ -266,7 +288,7 @@ def main():
|
266 | 288 | try:
|
267 | 289 | _main()
|
268 | 290 | except Exception as e:
|
269 |
| - log.error(str(e)) |
| 291 | + log.error(str(e), exc_info=_traceback) |
270 | 292 | sys.exit(1)
|
271 | 293 |
|
272 | 294 |
|
|
0 commit comments