|
1 | 1 | import logging |
2 | | -from typing import ClassVar |
| 2 | +from typing import ClassVar, List, Optional, Union |
3 | 3 |
|
4 | 4 | from colorama import Fore, Style, init |
5 | 5 |
|
|
18 | 18 |
|
19 | 19 |
|
20 | 20 | class Data: |
21 | | - """A class representing constants for the library.""" |
| 21 | + """A class representing constants for the library. |
22 | 22 |
|
23 | | - LOGGER: ClassVar[int] = logging.WARNING |
| 23 | + :ivar LOG_LEVEL ClassVar[int]: The default level of logging as an integer |
| 24 | + :ivar LOGGERS List[str]: A list of all loggers registered from this library |
| 25 | + """ |
| 26 | + |
| 27 | + LOG_LEVEL: ClassVar[int] = logging.ERROR |
| 28 | + LOGGERS: List[str] = [] |
| 29 | + |
| 30 | + |
| 31 | +def get_logger( |
| 32 | + logger: Optional[Union[logging.Logger, str]] = None, |
| 33 | + handler: Optional[logging.Handler] = logging.StreamHandler(), |
| 34 | +) -> logging.Logger: |
| 35 | + _logger = logging.getLogger(logger) if isinstance(logger, str) else logger |
| 36 | + _logger_name = logger if isinstance(logger, str) else logger.name |
| 37 | + if len(_logger.handlers) > 1: |
| 38 | + _logger.removeHandler(_logger.handlers[0]) |
| 39 | + _handler = handler |
| 40 | + _handler.setFormatter(CustomFormatter) |
| 41 | + _handler.setLevel(Data.LOG_LEVEL) |
| 42 | + _logger.addHandler(_handler) |
| 43 | + _logger.propagate = True |
| 44 | + |
| 45 | + Data.LOGGERS.append(_logger_name) |
| 46 | + return _logger |
24 | 47 |
|
25 | 48 |
|
26 | 49 | class CustomFormatter(logging.Formatter): |
27 | 50 | """A class that allows for customized logged outputs from the library.""" |
28 | 51 |
|
29 | | - format: str = "%(levelname)s:%(name)s:(ln.%(lineno)d):%(message)s" |
| 52 | + format_str: str = "%(levelname)s:%(name)s:(ln.%(lineno)d):%(message)s" |
30 | 53 | formats: dict = { |
31 | | - logging.DEBUG: Fore.CYAN + format + Fore.RESET, |
32 | | - logging.INFO: Fore.GREEN + format + Fore.RESET, |
33 | | - logging.WARNING: Fore.YELLOW + format + Fore.RESET, |
34 | | - logging.ERROR: Fore.RED + format + Fore.RESET, |
35 | | - logging.CRITICAL: Style.BRIGHT + Fore.RED + format + Fore.RESET + Style.NORMAL, |
| 54 | + logging.DEBUG: Fore.CYAN + format_str + Fore.RESET, |
| 55 | + logging.INFO: Fore.GREEN + format_str + Fore.RESET, |
| 56 | + logging.WARNING: Fore.YELLOW + format_str + Fore.RESET, |
| 57 | + logging.ERROR: Fore.RED + format_str + Fore.RESET, |
| 58 | + logging.CRITICAL: Style.BRIGHT + Fore.RED + format_str + Fore.RESET + Style.NORMAL, |
36 | 59 | } |
37 | 60 |
|
38 | 61 | def __init__(self): |
|
0 commit comments