logging
TOC
- Attributes:
- Functions:
- Classes:
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: