Skip to main content

logging

TOC

Attributes

🅰 LOGGERS

LOGGERS: dict[str, int] = {}

🅰 FORMAT

FORMAT = """<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}:{function}:{line}</cyan> - <level>{message}</level>"""

🅰 logger

logger: PatchedLogger = _logger.patch(_trace_patcher) #type: ignore

Functions

🅵 _trace_patcher

def _trace_patcher(log_record):
if log_record["name"] == "__main__":
log_record["name"] = log_record["file"].name
if log_record["function"] == "<module>":
log_record["function"] = "\x08"

🅵 add_logger

add_logger
def add_logger(
name: str,
sink: TextIO | Writable | Callable[[Message], None] | Handler,
*,
level: str | int | None = None,
format: str | FormatFunction | None = None,
filter: str | FilterFunction | FilterDict | None = None,
colorize: bool | None = None,
serialize: bool | None = None,
backtrace: bool | None = None,
diagnose: bool | None = None,
enqueue: bool | None = None
) -> None:
params = {k: v for k, v in locals().items() if v is not None}
params.pop("sink")
params.pop("name")
id = logger.add(sink, **params)
LOGGERS[name] = id

🅵 remove_logger

remove_logger
def remove_logger(name: str) -> None:
id = LOGGERS.pop(name, None)
if id:
logger.remove(id)
logger.success(f"Remove logger whose name is {name}")
else:
logger.warning(f"Cannot find logger with name {name}")

🅵 log_to_file_only

def log_to_file_only(file_name: str, *args: Any, **kwargs: Any) -> None:
logger.add(file_name, *args, **kwargs)
logger.success(f"Log to file {file_name} only")

🅵 debug_only

debug_only
def debug_only(*args: Any, **kwargs: Any) -> None:

def _debug_only(record: Record) -> bool:
return record["level"].name == "DEBUG"

filter = kwargs.pop("filter", None)
if filter:
logger.warning("Override filter!!!")
logger.remove()
logger.add(sys.stderr, *args, format=FORMAT, filter=_debug_only, **kwargs)
logger.debug("DEBUG ONLY!!!")

🅵 _call_importance

def _call_importance(__message: str, *args: Any, **kwargs: Any) -> None:

🅵 _excore_debug

def _excore_debug(__message: str, *args: Any, **kwargs: Any) -> None:

🅵 _enable_excore_debug

def _enable_excore_debug() -> None:
if os.getenv("EXCORE_DEBUG"):
logger.remove()
logger.add(sys.stdout, format=FORMAT, level="EXCORE")
logger.ex("Enabled excore debug")

🅵 init_logger

init_logger
def init_logger() -> None:
logger.add(sys.stderr, format=FORMAT)
logger.level("SUCCESS", color="<yellow>")
logger.level("WARNING", color="<red>")
logger.level("IMPORT", no=45, color="<YELLOW><red><bold>")
logger.level("EXCORE", no=9, color="<GREEN><cyan>")
logger.imp = _call_importance
logger.ex = _excore_debug

Classes

🅲 PatchedLogger

class PatchedLogger(Logger):

🅼 ex

def ex(self, __message: str, *args: Any, **kwargs: Any) -> None:

🅼 imp

def imp(self, __message: str, *args: Any, **kwargs: Any) -> None: