81 lines
2.2 KiB
Python
81 lines
2.2 KiB
Python
from logging import _STYLES, Filter, LogRecord, StrFormatStyle, basicConfig, getLogger
|
|
from re import compile
|
|
|
|
from rich.console import Console
|
|
from rich.logging import RichHandler
|
|
|
|
LOG_LEVEL = "INFO"
|
|
|
|
|
|
re_ansi = compile(r"(\x1b\[(?:[0-9]*;?)?[0-9][0-9;]*?m)|(\x1b\[0m(?!;))")
|
|
logger = getLogger("rich")
|
|
console2 = Console(tab_size=4, stderr=True, log_time_format="%a %h-%d.%H:%M:%S")
|
|
log_file = Console(file=open("phlyght.log", "w"), log_time_format="%a %h-%d.%H:%M:%S")
|
|
|
|
console_handler = RichHandler(
|
|
LOG_LEVEL,
|
|
console2,
|
|
log_time_format="%a %h-%d.%H:%M:%S.%f",
|
|
rich_tracebacks=True,
|
|
show_time=True,
|
|
)
|
|
file_handler = RichHandler(
|
|
LOG_LEVEL,
|
|
log_file,
|
|
log_time_format="%a %h-%d.%H:%M:%S.%f",
|
|
rich_tracebacks=True,
|
|
show_time=True,
|
|
)
|
|
|
|
|
|
class LogFilter(Filter):
|
|
def filter(self, record):
|
|
return True
|
|
|
|
|
|
class Format(StrFormatStyle):
|
|
def __init__(self, fmt, defaults):
|
|
self._fmt = fmt
|
|
super().__init__(fmt, defaults=defaults)
|
|
|
|
def format(self, record: LogRecord):
|
|
message = record.getMessage()
|
|
if record.pathname:
|
|
record.pathname = "/".join(record.pathname.split("/")[::-1][:3][::-1])
|
|
message = re_ansi.sub("", message)
|
|
return self._fmt.format(
|
|
levelname=record.levelname,
|
|
pathname=record.pathname,
|
|
lineno=record.lineno,
|
|
module=record.module,
|
|
message=message,
|
|
filename=record.filename,
|
|
created=record.created,
|
|
args=record.args,
|
|
levelno=record.levelno,
|
|
func_name=record.funcName,
|
|
stack_info=record.stack_info,
|
|
thread=record.thread,
|
|
thread_name=record.threadName,
|
|
exc_text=record.exc_text,
|
|
exc_info=record.exc_info,
|
|
)
|
|
|
|
|
|
_STYLES["&"] = (Format, "{message}") # type: ignore
|
|
|
|
logger.addHandler(console_handler)
|
|
logger.addHandler(file_handler)
|
|
|
|
console_handler.addFilter(LogFilter())
|
|
logger.setLevel(LOG_LEVEL)
|
|
for k, v in logger.root.manager.loggerDict.items():
|
|
logger.root.manager.loggerDict[k] = logger
|
|
|
|
basicConfig(
|
|
level=LOG_LEVEL,
|
|
style="&", # type: ignore
|
|
handlers=[console_handler, file_handler],
|
|
force=True,
|
|
)
|