Yanray Wang | 21127f7 | 2023-07-19 12:09:45 +0800 | [diff] [blame] | 1 | """Auxiliary functions used for logging module. |
| 2 | """ |
| 3 | |
| 4 | # Copyright The Mbed TLS Contributors |
Dave Rodgman | 16799db | 2023-11-02 19:47:20 +0000 | [diff] [blame] | 5 | # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later |
Yanray Wang | 21127f7 | 2023-07-19 12:09:45 +0800 | [diff] [blame] | 6 | # |
Yanray Wang | 21127f7 | 2023-07-19 12:09:45 +0800 | [diff] [blame] | 7 | |
| 8 | import logging |
| 9 | import sys |
| 10 | |
| 11 | def configure_logger( |
| 12 | logger: logging.Logger, |
Yanray Wang | 1998aac | 2023-08-14 10:33:37 +0800 | [diff] [blame] | 13 | log_format="[%(levelname)s]: %(message)s", |
| 14 | split_level=logging.WARNING |
Yanray Wang | 21127f7 | 2023-07-19 12:09:45 +0800 | [diff] [blame] | 15 | ) -> None: |
| 16 | """ |
| 17 | Configure the logging.Logger instance so that: |
Yanray Wang | 15b1358 | 2023-07-26 14:48:08 +0800 | [diff] [blame] | 18 | - Format is set to any log_format. |
Yanray Wang | 21127f7 | 2023-07-19 12:09:45 +0800 | [diff] [blame] | 19 | Default: "[%(levelname)s]: %(message)s" |
Yanray Wang | 1998aac | 2023-08-14 10:33:37 +0800 | [diff] [blame] | 20 | - loglevel >= split_level are printed to stderr. |
| 21 | - loglevel < split_level are printed to stdout. |
| 22 | Default: logging.WARNING |
Yanray Wang | 21127f7 | 2023-07-19 12:09:45 +0800 | [diff] [blame] | 23 | """ |
| 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 Wang | 15b1358 | 2023-07-26 14:48:08 +0800 | [diff] [blame] | 33 | log_formatter = logging.Formatter(log_format) |
Yanray Wang | 21127f7 | 2023-07-19 12:09:45 +0800 | [diff] [blame] | 34 | |
Yanray Wang | 1998aac | 2023-08-14 10:33:37 +0800 | [diff] [blame] | 35 | # set loglevel >= split_level to be printed to stderr |
Yanray Wang | 21127f7 | 2023-07-19 12:09:45 +0800 | [diff] [blame] | 36 | stderr_hdlr = logging.StreamHandler(sys.stderr) |
Yanray Wang | 1998aac | 2023-08-14 10:33:37 +0800 | [diff] [blame] | 37 | stderr_hdlr.setLevel(split_level) |
Yanray Wang | 21127f7 | 2023-07-19 12:09:45 +0800 | [diff] [blame] | 38 | stderr_hdlr.setFormatter(log_formatter) |
| 39 | |
Yanray Wang | 1998aac | 2023-08-14 10:33:37 +0800 | [diff] [blame] | 40 | # set loglevel < split_level to be printed to stdout |
Yanray Wang | 21127f7 | 2023-07-19 12:09:45 +0800 | [diff] [blame] | 41 | stdout_hdlr = logging.StreamHandler(sys.stdout) |
Yanray Wang | 1998aac | 2023-08-14 10:33:37 +0800 | [diff] [blame] | 42 | stdout_hdlr.addFilter(MaxLevelFilter(split_level - 1)) |
Yanray Wang | 21127f7 | 2023-07-19 12:09:45 +0800 | [diff] [blame] | 43 | stdout_hdlr.setFormatter(log_formatter) |
| 44 | |
| 45 | logger.addHandler(stderr_hdlr) |
| 46 | logger.addHandler(stdout_hdlr) |