77 lines
2.2 KiB
Python
77 lines
2.2 KiB
Python
import logging
|
|
from typing import Any, Dict
|
|
|
|
from rich_toolkit import RichToolkit, RichToolkitTheme
|
|
from rich_toolkit.styles import TaggedStyle
|
|
from uvicorn.logging import DefaultFormatter
|
|
|
|
|
|
class CustomFormatter(DefaultFormatter):
|
|
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
|
super().__init__(*args, **kwargs)
|
|
self.toolkit = get_rich_toolkit()
|
|
|
|
def formatMessage(self, record: logging.LogRecord) -> str:
|
|
return self.toolkit.print_as_string(record.getMessage(), tag=record.levelname)
|
|
|
|
|
|
def get_uvicorn_log_config() -> Dict[str, Any]:
|
|
return {
|
|
"version": 1,
|
|
"disable_existing_loggers": False,
|
|
"formatters": {
|
|
"default": {
|
|
"()": CustomFormatter,
|
|
"fmt": "%(levelprefix)s %(message)s",
|
|
"use_colors": None,
|
|
},
|
|
"access": {
|
|
"()": CustomFormatter,
|
|
"fmt": "%(levelprefix)s %(client_addr)s - '%(request_line)s' %(status_code)s",
|
|
},
|
|
},
|
|
"handlers": {
|
|
"default": {
|
|
"formatter": "default",
|
|
"class": "logging.StreamHandler",
|
|
"stream": "ext://sys.stderr",
|
|
},
|
|
"access": {
|
|
"formatter": "access",
|
|
"class": "logging.StreamHandler",
|
|
"stream": "ext://sys.stdout",
|
|
},
|
|
},
|
|
"loggers": {
|
|
"uvicorn": {"handlers": ["default"], "level": "INFO"},
|
|
"uvicorn.error": {"level": "INFO"},
|
|
"uvicorn.access": {
|
|
"handlers": ["access"],
|
|
"level": "INFO",
|
|
"propagate": False,
|
|
},
|
|
},
|
|
}
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def get_rich_toolkit() -> RichToolkit:
|
|
theme = RichToolkitTheme(
|
|
style=TaggedStyle(tag_width=11),
|
|
theme={
|
|
"tag.title": "white on #009485",
|
|
"tag": "white on #007166",
|
|
"placeholder": "grey85",
|
|
"text": "white",
|
|
"selected": "#007166",
|
|
"result": "grey85",
|
|
"progress": "on #007166",
|
|
"error": "red",
|
|
"log.info": "black on blue",
|
|
},
|
|
)
|
|
|
|
return RichToolkit(theme=theme)
|