1a8e1175bSopenharmony_ci"""Auxiliary functions used for logging module. 2a8e1175bSopenharmony_ci""" 3a8e1175bSopenharmony_ci 4a8e1175bSopenharmony_ci# Copyright The Mbed TLS Contributors 5a8e1175bSopenharmony_ci# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 6a8e1175bSopenharmony_ci# 7a8e1175bSopenharmony_ci 8a8e1175bSopenharmony_ciimport logging 9a8e1175bSopenharmony_ciimport sys 10a8e1175bSopenharmony_ci 11a8e1175bSopenharmony_cidef configure_logger( 12a8e1175bSopenharmony_ci logger: logging.Logger, 13a8e1175bSopenharmony_ci log_format="[%(levelname)s]: %(message)s", 14a8e1175bSopenharmony_ci split_level=logging.WARNING 15a8e1175bSopenharmony_ci ) -> None: 16a8e1175bSopenharmony_ci """ 17a8e1175bSopenharmony_ci Configure the logging.Logger instance so that: 18a8e1175bSopenharmony_ci - Format is set to any log_format. 19a8e1175bSopenharmony_ci Default: "[%(levelname)s]: %(message)s" 20a8e1175bSopenharmony_ci - loglevel >= split_level are printed to stderr. 21a8e1175bSopenharmony_ci - loglevel < split_level are printed to stdout. 22a8e1175bSopenharmony_ci Default: logging.WARNING 23a8e1175bSopenharmony_ci """ 24a8e1175bSopenharmony_ci class MaxLevelFilter(logging.Filter): 25a8e1175bSopenharmony_ci # pylint: disable=too-few-public-methods 26a8e1175bSopenharmony_ci def __init__(self, max_level, name=''): 27a8e1175bSopenharmony_ci super().__init__(name) 28a8e1175bSopenharmony_ci self.max_level = max_level 29a8e1175bSopenharmony_ci 30a8e1175bSopenharmony_ci def filter(self, record: logging.LogRecord) -> bool: 31a8e1175bSopenharmony_ci return record.levelno <= self.max_level 32a8e1175bSopenharmony_ci 33a8e1175bSopenharmony_ci log_formatter = logging.Formatter(log_format) 34a8e1175bSopenharmony_ci 35a8e1175bSopenharmony_ci # set loglevel >= split_level to be printed to stderr 36a8e1175bSopenharmony_ci stderr_hdlr = logging.StreamHandler(sys.stderr) 37a8e1175bSopenharmony_ci stderr_hdlr.setLevel(split_level) 38a8e1175bSopenharmony_ci stderr_hdlr.setFormatter(log_formatter) 39a8e1175bSopenharmony_ci 40a8e1175bSopenharmony_ci # set loglevel < split_level to be printed to stdout 41a8e1175bSopenharmony_ci stdout_hdlr = logging.StreamHandler(sys.stdout) 42a8e1175bSopenharmony_ci stdout_hdlr.addFilter(MaxLevelFilter(split_level - 1)) 43a8e1175bSopenharmony_ci stdout_hdlr.setFormatter(log_formatter) 44a8e1175bSopenharmony_ci 45a8e1175bSopenharmony_ci logger.addHandler(stderr_hdlr) 46a8e1175bSopenharmony_ci logger.addHandler(stdout_hdlr) 47