Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c869783b0b | ||
|
|
c7577e9ff7 |
@@ -35,6 +35,8 @@ from .environ import env
|
||||
|
||||
ANSI_ESCAPE_RE = re.compile(r"\x1b\[[0-9;]*m")
|
||||
|
||||
RESET = "\033[0m"
|
||||
|
||||
ACCESS_LOG_FMT = "%(client)s %(status)s %(method)s %(host)s%(path)s %(extra)s%(timing)s"
|
||||
|
||||
ACCESS_LOGGER = "fastapi_vue.access"
|
||||
@@ -122,7 +124,14 @@ class Formatter(logging.Formatter):
|
||||
return _level_prefix(record) + record.getMessage()
|
||||
formatted = super().formatMessage(record)
|
||||
if not self.use_colors:
|
||||
formatted = strip_ansi(formatted)
|
||||
return strip_ansi(formatted)
|
||||
# Guard against app-supplied fields (``extra``) carrying raw color
|
||||
# codes without a reset: ensure the line begins and ends with a
|
||||
# reset, but only add one where it's missing to avoid duplicates.
|
||||
if not formatted.startswith(RESET):
|
||||
formatted = RESET + formatted
|
||||
if not formatted.endswith(RESET):
|
||||
formatted += RESET
|
||||
return formatted
|
||||
|
||||
|
||||
|
||||
@@ -10,23 +10,19 @@ from pathlib import Path
|
||||
|
||||
MIN_NODE_VERSION = 20
|
||||
|
||||
# Duplicated from fastapi_vue.logging because build environment is isolated
|
||||
_LEVEL_EMOJI = {
|
||||
logging.DEBUG: "🐛",
|
||||
logging.INFO: "🔷",
|
||||
logging.WARNING: "❗",
|
||||
logging.ERROR: "🛑",
|
||||
logging.CRITICAL: "🚨",
|
||||
}
|
||||
|
||||
|
||||
class _Formatter(logging.Formatter):
|
||||
"""Emoji level prefix formatter, mirroring fastapi_vue.logging.Formatter."""
|
||||
"""Prefix formatter, intentionally different from fastapi_vue.logging.
|
||||
|
||||
INFO and below pass through unprefixed so messages can use their own
|
||||
markings (>>>, ###); WARNING and above get an emoji prefix.
|
||||
"""
|
||||
|
||||
def format(self, record: logging.LogRecord) -> str:
|
||||
emoji = _LEVEL_EMOJI.get(record.levelno)
|
||||
prefix = f"{emoji} " if emoji else f"{record.levelname}: "
|
||||
return prefix + record.getMessage()
|
||||
if record.levelno >= logging.ERROR:
|
||||
return f"🛑 {record.getMessage()}"
|
||||
if record.levelno >= logging.WARNING:
|
||||
return f"💣 {record.getMessage()}"
|
||||
return record.getMessage()
|
||||
|
||||
|
||||
_handler = logging.StreamHandler()
|
||||
|
||||
@@ -133,7 +133,7 @@ async def ready(url: str, path: str = "", max_attempts: int = 50) -> None:
|
||||
|
||||
for attempt in range(max_attempts):
|
||||
if await http_get_server(f"{url}{path}", timeout=1.0) is not None:
|
||||
logger.info("✓ Backend ready!")
|
||||
logger.info("🟢 Backend ready!")
|
||||
return
|
||||
if attempt == max_attempts - 1:
|
||||
logger.error("Backend at %s didn't start in time", url)
|
||||
|
||||
Reference in New Issue
Block a user