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