blob: ddd7c7fd672e189bdc00b3971688feec4cfa120f [file] [log] [blame]
Yanray Wang21127f72023-07-19 12:09:45 +08001"""Auxiliary functions used for logging module.
2"""
3
4# Copyright The Mbed TLS Contributors
Dave Rodgman16799db2023-11-02 19:47:20 +00005# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
Yanray Wang21127f72023-07-19 12:09:45 +08006#
Yanray Wang21127f72023-07-19 12:09:45 +08007
8import logging
9import sys
10
11def configure_logger(
12 logger: logging.Logger,
Yanray Wang1998aac2023-08-14 10:33:37 +080013 log_format="[%(levelname)s]: %(message)s",
14 split_level=logging.WARNING
Yanray Wang21127f72023-07-19 12:09:45 +080015 ) -> None:
16 """
17 Configure the logging.Logger instance so that:
Yanray Wang15b13582023-07-26 14:48:08 +080018 - Format is set to any log_format.
Yanray Wang21127f72023-07-19 12:09:45 +080019 Default: "[%(levelname)s]: %(message)s"
Yanray Wang1998aac2023-08-14 10:33:37 +080020 - loglevel >= split_level are printed to stderr.
21 - loglevel < split_level are printed to stdout.
22 Default: logging.WARNING
Yanray Wang21127f72023-07-19 12:09:45 +080023 """
24 class MaxLevelFilter(logging.Filter):
25 # pylint: disable=too-few-public-methods
26 def __init__(self, max_level, name=''):
27 super().__init__(name)
28 self.max_level = max_level
29
30 def filter(self, record: logging.LogRecord) -> bool:
31 return record.levelno <= self.max_level
32
Yanray Wang15b13582023-07-26 14:48:08 +080033 log_formatter = logging.Formatter(log_format)
Yanray Wang21127f72023-07-19 12:09:45 +080034
Yanray Wang1998aac2023-08-14 10:33:37 +080035 # set loglevel >= split_level to be printed to stderr
Yanray Wang21127f72023-07-19 12:09:45 +080036 stderr_hdlr = logging.StreamHandler(sys.stderr)
Yanray Wang1998aac2023-08-14 10:33:37 +080037 stderr_hdlr.setLevel(split_level)
Yanray Wang21127f72023-07-19 12:09:45 +080038 stderr_hdlr.setFormatter(log_formatter)
39
Yanray Wang1998aac2023-08-14 10:33:37 +080040 # set loglevel < split_level to be printed to stdout
Yanray Wang21127f72023-07-19 12:09:45 +080041 stdout_hdlr = logging.StreamHandler(sys.stdout)
Yanray Wang1998aac2023-08-14 10:33:37 +080042 stdout_hdlr.addFilter(MaxLevelFilter(split_level - 1))
Yanray Wang21127f72023-07-19 12:09:45 +080043 stdout_hdlr.setFormatter(log_formatter)
44
45 logger.addHandler(stderr_hdlr)
46 logger.addHandler(stdout_hdlr)