diff options
-rw-r--r-- | bitbake/lib/bb/ui/knotty.py | 134 |
1 files changed, 96 insertions, 38 deletions
diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py index d5dce7172a..386f27876d 100644 --- a/bitbake/lib/bb/ui/knotty.py +++ b/bitbake/lib/bb/ui/knotty.py | |||
@@ -370,7 +370,11 @@ def _log_settings_from_server(server, observe_only): | |||
370 | if error: | 370 | if error: |
371 | logger.error("Unable to get the value of BB_CONSOLELOG variable: %s" % error) | 371 | logger.error("Unable to get the value of BB_CONSOLELOG variable: %s" % error) |
372 | raise BaseException(error) | 372 | raise BaseException(error) |
373 | return includelogs, loglines, consolelogfile | 373 | logconfigfile, error = server.runCommand([cmd, "BB_LOGCONFIG"]) |
374 | if error: | ||
375 | logger.error("Unable to get the value of BB_LOGCONFIG variable: %s" % error) | ||
376 | raise BaseException(error) | ||
377 | return includelogs, loglines, consolelogfile, logconfigfile | ||
374 | 378 | ||
375 | _evt_list = [ "bb.runqueue.runQueueExitWait", "bb.event.LogExecTTY", "logging.LogRecord", | 379 | _evt_list = [ "bb.runqueue.runQueueExitWait", "bb.event.LogExecTTY", "logging.LogRecord", |
376 | "bb.build.TaskFailed", "bb.build.TaskBase", "bb.event.ParseStarted", | 380 | "bb.build.TaskFailed", "bb.build.TaskBase", "bb.event.ParseStarted", |
@@ -387,7 +391,87 @@ def main(server, eventHandler, params, tf = TerminalFilter): | |||
387 | if not params.observe_only: | 391 | if not params.observe_only: |
388 | params.updateToServer(server, os.environ.copy()) | 392 | params.updateToServer(server, os.environ.copy()) |
389 | 393 | ||
390 | includelogs, loglines, consolelogfile = _log_settings_from_server(server, params.observe_only) | 394 | includelogs, loglines, consolelogfile, logconfigfile = _log_settings_from_server(server, params.observe_only) |
395 | |||
396 | loglevel, _ = bb.msg.constructLogOptions() | ||
397 | |||
398 | if params.options.quiet == 0: | ||
399 | console_loglevel = loglevel | ||
400 | elif params.options.quiet > 2: | ||
401 | console_loglevel = bb.msg.BBLogFormatter.ERROR | ||
402 | else: | ||
403 | console_loglevel = bb.msg.BBLogFormatter.WARNING | ||
404 | |||
405 | logconfig = { | ||
406 | "version": 1, | ||
407 | "handlers": { | ||
408 | "BitBake.console": { | ||
409 | "class": "logging.StreamHandler", | ||
410 | "formatter": "BitBake.consoleFormatter", | ||
411 | "level": console_loglevel, | ||
412 | "stream": "ext://sys.stdout", | ||
413 | "filters": ["BitBake.stdoutFilter"], | ||
414 | }, | ||
415 | "BitBake.errconsole": { | ||
416 | "class": "logging.StreamHandler", | ||
417 | "formatter": "BitBake.consoleFormatter", | ||
418 | "level": loglevel, | ||
419 | "stream": "ext://sys.stderr", | ||
420 | "filters": ["BitBake.stderrFilter"], | ||
421 | }, | ||
422 | }, | ||
423 | "formatters": { | ||
424 | # This format instance will get color output enabled by the | ||
425 | # terminal | ||
426 | "BitBake.consoleFormatter" : { | ||
427 | "()": "bb.msg.BBLogFormatter", | ||
428 | "format": "%(levelname)s: %(message)s" | ||
429 | }, | ||
430 | # The file log requires a separate instance so that it doesn't get | ||
431 | # color enabled | ||
432 | "BitBake.logfileFormatter": { | ||
433 | "()": "bb.msg.BBLogFormatter", | ||
434 | "format": "%(levelname)s: %(message)s" | ||
435 | } | ||
436 | }, | ||
437 | "filters": { | ||
438 | "BitBake.stdoutFilter": { | ||
439 | "()": "bb.msg.LogFilterLTLevel", | ||
440 | "level": "ERROR" | ||
441 | }, | ||
442 | "BitBake.stderrFilter": { | ||
443 | "()": "bb.msg.LogFilterGEQLevel", | ||
444 | "level": "ERROR" | ||
445 | } | ||
446 | }, | ||
447 | "loggers": { | ||
448 | "BitBake": { | ||
449 | "level": loglevel, | ||
450 | "handlers": ["BitBake.console", "BitBake.errconsole"], | ||
451 | } | ||
452 | }, | ||
453 | "disable_existing_loggers": False | ||
454 | } | ||
455 | |||
456 | # Enable the console log file if enabled | ||
457 | if consolelogfile and not params.options.show_environment and not params.options.show_versions: | ||
458 | logconfig["handlers"]["BitBake.consolelog"] ={ | ||
459 | "class": "logging.FileHandler", | ||
460 | "formatter": "BitBake.logfileFormatter", | ||
461 | "level": "INFO", | ||
462 | "filename": consolelogfile, | ||
463 | } | ||
464 | logconfig["loggers"]["BitBake"]["handlers"].append("BitBake.consolelog") | ||
465 | |||
466 | bb.utils.mkdirhier(os.path.dirname(consolelogfile)) | ||
467 | loglink = os.path.join(os.path.dirname(consolelogfile), 'console-latest.log') | ||
468 | bb.utils.remove(loglink) | ||
469 | try: | ||
470 | os.symlink(os.path.basename(consolelogfile), loglink) | ||
471 | except OSError: | ||
472 | pass | ||
473 | |||
474 | bb.msg.setLoggingConfig(logconfig, logconfigfile) | ||
391 | 475 | ||
392 | if sys.stdin.isatty() and sys.stdout.isatty(): | 476 | if sys.stdin.isatty() and sys.stdout.isatty(): |
393 | log_exec_tty = True | 477 | log_exec_tty = True |
@@ -396,23 +480,16 @@ def main(server, eventHandler, params, tf = TerminalFilter): | |||
396 | 480 | ||
397 | helper = uihelper.BBUIHelper() | 481 | helper = uihelper.BBUIHelper() |
398 | 482 | ||
399 | console = logging.StreamHandler(sys.stdout) | 483 | # Look for the specially designated handlers which need to be passed to the |
400 | errconsole = logging.StreamHandler(sys.stderr) | 484 | # terminal handler |
401 | format_str = "%(levelname)s: %(message)s" | 485 | console = None |
402 | format = bb.msg.BBLogFormatter(format_str) | 486 | errconsole = None |
403 | if params.options.quiet == 0: | 487 | for h in logger.handlers: |
404 | forcelevel = None | 488 | name = getattr(h, '_name', None) |
405 | elif params.options.quiet > 2: | 489 | if name == 'BitBake.console': |
406 | forcelevel = bb.msg.BBLogFormatter.ERROR | 490 | console = h |
407 | else: | 491 | elif name == 'BitBake.errconsole': |
408 | forcelevel = bb.msg.BBLogFormatter.WARNING | 492 | errconsole = h |
409 | bb.msg.addDefaultlogFilter(console, bb.msg.BBLogFilterStdOut, forcelevel) | ||
410 | bb.msg.addDefaultlogFilter(errconsole, bb.msg.BBLogFilterStdErr) | ||
411 | console.setFormatter(format) | ||
412 | errconsole.setFormatter(format) | ||
413 | if not bb.msg.has_console_handler(logger): | ||
414 | logger.addHandler(console) | ||
415 | logger.addHandler(errconsole) | ||
416 | 493 | ||
417 | bb.utils.set_process_name("KnottyUI") | 494 | bb.utils.set_process_name("KnottyUI") |
418 | 495 | ||
@@ -420,21 +497,6 @@ def main(server, eventHandler, params, tf = TerminalFilter): | |||
420 | server.terminateServer() | 497 | server.terminateServer() |
421 | return | 498 | return |
422 | 499 | ||
423 | consolelog = None | ||
424 | if consolelogfile and not params.options.show_environment and not params.options.show_versions: | ||
425 | bb.utils.mkdirhier(os.path.dirname(consolelogfile)) | ||
426 | conlogformat = bb.msg.BBLogFormatter(format_str) | ||
427 | consolelog = logging.FileHandler(consolelogfile) | ||
428 | bb.msg.addDefaultlogFilter(consolelog) | ||
429 | consolelog.setFormatter(conlogformat) | ||
430 | logger.addHandler(consolelog) | ||
431 | loglink = os.path.join(os.path.dirname(consolelogfile), 'console-latest.log') | ||
432 | bb.utils.remove(loglink) | ||
433 | try: | ||
434 | os.symlink(os.path.basename(consolelogfile), loglink) | ||
435 | except OSError: | ||
436 | pass | ||
437 | |||
438 | llevel, debug_domains = bb.msg.constructLogOptions() | 500 | llevel, debug_domains = bb.msg.constructLogOptions() |
439 | server.runCommand(["setEventMask", server.getEventHandle(), llevel, debug_domains, _evt_list]) | 501 | server.runCommand(["setEventMask", server.getEventHandle(), llevel, debug_domains, _evt_list]) |
440 | 502 | ||
@@ -761,8 +823,4 @@ def main(server, eventHandler, params, tf = TerminalFilter): | |||
761 | if e.errno == errno.EPIPE: | 823 | if e.errno == errno.EPIPE: |
762 | pass | 824 | pass |
763 | 825 | ||
764 | if consolelog: | ||
765 | logger.removeHandler(consolelog) | ||
766 | consolelog.close() | ||
767 | |||
768 | return return_value | 826 | return return_value |