|
| 1 | +import logging |
| 2 | +from typing import Union |
| 3 | + |
| 4 | + |
| 5 | +def get_console_logger(name: str, level: Union[int, str, None] = None) -> logging.Logger: |
| 6 | + """ |
| 7 | + Get a console logger with the specified name and log level. |
| 8 | + :param name: logger name |
| 9 | + :param level: log level which can be an integer, string, or None |
| 10 | + :return: console logger |
| 11 | + """ |
| 12 | + if level is None: |
| 13 | + level = logging.INFO |
| 14 | + elif isinstance(level, str): |
| 15 | + level = _str_to_log_level(level) |
| 16 | + elif not isinstance(level, int): |
| 17 | + raise TypeError(f'Invalid log level type: {type(level)}') |
| 18 | + |
| 19 | + return _create_console_logger(name, level) |
| 20 | + |
| 21 | + |
| 22 | +def _str_to_log_level(level: str) -> int: |
| 23 | + """ |
| 24 | + Convert a string log level to an integer log level. |
| 25 | + :param level: string log level |
| 26 | + :return: integer log level |
| 27 | + """ |
| 28 | + level = level.upper() |
| 29 | + log_levels = { |
| 30 | + 'NOTSET': logging.NOTSET, |
| 31 | + 'DEBUG': logging.DEBUG, |
| 32 | + 'INFO': logging.INFO, |
| 33 | + 'WARNING': logging.WARNING, |
| 34 | + 'WARN': logging.WARNING, |
| 35 | + 'ERROR': logging.ERROR, |
| 36 | + 'CRITICAL': logging.CRITICAL, |
| 37 | + 'FATAL': logging.CRITICAL |
| 38 | + } |
| 39 | + |
| 40 | + if level in log_levels: |
| 41 | + return log_levels[level] |
| 42 | + else: |
| 43 | + raise ValueError(f'Invalid log level: {level}') |
| 44 | + |
| 45 | + |
| 46 | +def _create_console_logger(name: str, level: int) -> logging.Logger: |
| 47 | + """ |
| 48 | + Get a console logger with the specified name and log level. |
| 49 | + :param name: logger name |
| 50 | + :param level: log level |
| 51 | + :return: console logger |
| 52 | + """ |
| 53 | + logger = logging.getLogger(name) |
| 54 | + logger.setLevel(level) |
| 55 | + formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') |
| 56 | + console_handler = logging.StreamHandler() |
| 57 | + console_handler.setFormatter(formatter) |
| 58 | + logger.addHandler(console_handler) |
| 59 | + return logger |
0 commit comments