Spaces:
Sleeping
Sleeping
import logging | |
import sys | |
import threading | |
from typing import Optional | |
from rich import get_console | |
_lock = threading.Lock() | |
_default_handler: Optional[logging.Handler] = None | |
_default_log_level = logging.WARNING | |
# fancy logger | |
_console = get_console() | |
def _get_library_name() -> str: | |
return __name__.split(".")[0] | |
def _get_library_root_logger() -> logging.Logger: | |
return logging.getLogger(_get_library_name()) | |
def _configure_library_root_logger() -> None: | |
global _default_handler | |
with _lock: | |
if _default_handler: | |
# This library has already configured the library root logger. | |
return | |
_default_handler = logging.StreamHandler() # Set sys.stderr as stream. | |
_default_handler.flush = sys.stderr.flush | |
# Apply our default configuration to the library root logger. | |
library_root_logger = _get_library_root_logger() | |
library_root_logger.addHandler(_default_handler) | |
library_root_logger.setLevel(_default_log_level) | |
library_root_logger.propagate = False | |
def _reset_library_root_logger() -> None: | |
global _default_handler | |
with _lock: | |
if not _default_handler: | |
return | |
library_root_logger = _get_library_root_logger() | |
library_root_logger.removeHandler(_default_handler) | |
library_root_logger.setLevel(logging.NOTSET) | |
_default_handler = None | |
def set_log_level(level: int, logger: logging.Logger = None) -> None: | |
""" | |
Set the log level. | |
Args: | |
level (:obj:`int`): | |
Logging level. | |
logger (:obj:`logging.Logger`): | |
Logger to set the log level. | |
""" | |
if not logger: | |
_configure_library_root_logger() | |
logger = _get_library_root_logger() | |
logger.setLevel(level) | |
def get_logger( | |
name: Optional[str] = None, | |
level: Optional[int] = None, | |
formatter: Optional[str] = None, | |
) -> logging.Logger: | |
""" | |
Return a logger with the specified name. | |
""" | |
if name is None: | |
name = _get_library_name() | |
_configure_library_root_logger() | |
if level is not None: | |
set_log_level(level) | |
if formatter is None: | |
formatter = logging.Formatter( | |
"%(asctime)s - %(levelname)s - %(name)s - %(message)s" | |
) | |
_default_handler.setFormatter(formatter) | |
return logging.getLogger(name) | |
def get_console_logger(): | |
return _console | |