diff mbox series

[5/5] runfvp: Fix verbose output when using --console

Message ID 20221115150116.314729-5-peter.hoyes@arm.com
State New
Headers show
Series [1/5] arm/fvp: Join cli arguments in verbose logging | expand

Commit Message

Peter Hoyes Nov. 15, 2022, 3:01 p.m. UTC
From: Peter Hoyes <Peter.Hoyes@arm.com>

Start a new thread to simultaneously log the output of FVP and the
telnet output if the --verbose flag is passed to runfvp. So that
ConsolePortParser can read the same stream, use itertools.tee to
temporarily duplicate the stream.

Use a custom log format string with an escape character to ensure that
log output always starts at the beginning of a line when interleaved
with console output.

Issue-Id: SCM-5314
Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
Change-Id: I3e815d9d899425e0d2af619524f09f2eda87562c
---
 scripts/runfvp | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/scripts/runfvp b/scripts/runfvp
index 454acb86..939352b5 100755
--- a/scripts/runfvp
+++ b/scripts/runfvp
@@ -1,9 +1,11 @@ 
 #! /usr/bin/env python3
 
+import itertools
 import os
 import pathlib
 import signal
 import sys
+import threading
 
 import logging
 logger = logging.getLogger("RunFVP")
@@ -36,7 +38,8 @@  def parse_args(arguments):
         fvp_args = []
 
     args = parser.parse_args(args=arguments)
-    logging.basicConfig(level=args.verbose and logging.DEBUG or logging.WARNING)
+    logging.basicConfig(level=args.verbose and logging.DEBUG or logging.WARNING,
+                        format='\033[G%(levelname)s: %(message)s')
 
     # If we're hooking up the console, don't start any terminals
     if args.console:
@@ -56,8 +59,17 @@  def start_fvp(args, config, extra_args):
             if not expected_terminal:
                 logger.error("--console used but FVP_CONSOLE not set in machine configuration")
                 return 1
-            parser = runner.ConsolePortParser(fvp.stdout)
+            port_stdout, log_stdout = itertools.tee(fvp.stdout, 2)
+            parser = runner.ConsolePortParser(port_stdout)
             port = parser.parse_port(expected_terminal)
+
+            def debug_log():
+                for line in log_stdout:
+                    line = line.strip().decode(errors='ignore')
+                    logger.debug(f'FVP output: {line}')
+            log_thread = threading.Thread(None, debug_log)
+            log_thread.start()
+
             telnet = fvp.create_telnet(port)
             telnet.wait()
             logger.debug(f"Telnet quit, cancelling tasks")