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