Commit a7e2846a authored by Anas Nashif's avatar Anas Nashif Committed by Benjamin Cabé
Browse files

twister: setup logging per process



Setup logging per process to fix issue on both mac and windows where
handlers are not available to the processes.

Fixes #86237

Signed-off-by: default avatarAnas Nashif <anas.nashif@intel.com>
parent 3a996c57
Loading
Loading
Loading
Loading
+36 −1
Original line number Diff line number Diff line
@@ -5,10 +5,16 @@
Common code used when logging that is needed by multiple modules.
'''

import logging
import os
import platform
import shlex

_WINDOWS = (platform.system() == 'Windows')
_WINDOWS = platform.system() == 'Windows'


logger = logging.getLogger("twister")
logger.setLevel(logging.DEBUG)

def log_command(logger, msg, args):
    '''Platform-independent helper for logging subprocess invocations.
@@ -25,3 +31,32 @@ def log_command(logger, msg, args):
        logger.debug(msg, str(args))
    else:
        logger.debug(msg, shlex.join(args))

def setup_logging(outdir, log_file, log_level, timestamps):
    # create file handler which logs even debug messages
    if log_file:
        file_handler = logging.FileHandler(log_file)
    else:
        file_handler = logging.FileHandler(os.path.join(outdir, "twister.log"))

    file_handler.setLevel(logging.DEBUG)

    # create console handler with a higher log level
    console_handler = logging.StreamHandler()
    console_handler.setLevel(getattr(logging, log_level))

    # create formatter and add it to the handlers
    if timestamps:
        formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
    else:
        formatter = logging.Formatter("%(levelname)-7s - %(message)s")

    formatter_file = logging.Formatter(
        "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
    )
    console_handler.setFormatter(formatter)
    file_handler.setFormatter(formatter_file)

    # add the handlers to logger
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)
+4 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ from packaging import version
from twisterlib.cmakecache import CMakeCache
from twisterlib.environment import canonical_zephyr_base
from twisterlib.error import BuildError, ConfigurationError, StatusAttributeError
from twisterlib.log_helper import setup_logging
from twisterlib.statuses import TwisterStatus

if version.parse(elftools.__version__) < version.parse('0.24'):
@@ -978,7 +979,9 @@ class ProjectBuilder(FilterBuilder):
        additionals = {}

        op = message.get('op')

        options = self.options
        if not logger.handlers:
            setup_logging(options.outdir, options.log_file, options.log_level, options.timestamps)
        self.instance.setup_handler(self.env)

        if op == "filter":
+1 −31
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ from colorama import Fore
from twisterlib.coverage import run_coverage
from twisterlib.environment import TwisterEnv
from twisterlib.hardwaremap import HardwareMap
from twisterlib.log_helper import setup_logging
from twisterlib.package import Artifacts
from twisterlib.reports import Reporting
from twisterlib.runner import TwisterRunner
@@ -24,37 +25,6 @@ from twisterlib.testplan import TestPlan
logger = logging.getLogger("twister")
logger.setLevel(logging.DEBUG)


def setup_logging(outdir, log_file, log_level, timestamps):
    # create file handler which logs even debug messages
    if log_file:
        file_handler = logging.FileHandler(log_file)
    else:
        file_handler = logging.FileHandler(os.path.join(outdir, "twister.log"))

    file_handler.setLevel(logging.DEBUG)

    # create console handler with a higher log level
    console_handler = logging.StreamHandler()
    console_handler.setLevel(getattr(logging, log_level))

    # create formatter and add it to the handlers
    if timestamps:
        formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
    else:
        formatter = logging.Formatter("%(levelname)-7s - %(message)s")

    formatter_file = logging.Formatter(
        "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
    )
    console_handler.setFormatter(formatter)
    file_handler.setFormatter(formatter_file)

    # add the handlers to logger
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)


def init_color(colorama_strip):
    colorama.init(strip=colorama_strip)

+4 −0
Original line number Diff line number Diff line
@@ -1482,6 +1482,7 @@ TESTDATA_6 = [
def test_projectbuilder_process(
    caplog,
    mocked_jobserver,
    tmp_path,
    message,
    instance_status,
    instance_reason,
@@ -1529,6 +1530,9 @@ def test_projectbuilder_process(
    pb.options.prep_artifacts_for_testing = options_prep_artifacts
    pb.options.runtime_artifact_cleanup = options_runtime_artifacts
    pb.options.cmake_only = options_cmake_only
    pb.options.outdir = tmp_path
    pb.options.log_file = None
    pb.options.log_level = "DEBUG"

    pb.cmake = mock.Mock(return_value=cmake_res)
    pb.build = mock.Mock(return_value=build_res)