Worker stderr is now inherited by the parent, so its log lines land in the server log — but they arrived with the default logging format and a noisy "preview-worker config=..." line at every spawn. - Extract the emoji level-prefix formatting from cista.sanic_logging into cista.util.logformat, which has no Sanic dependency (the worker must not import Sanic: import-time prints could corrupt the stdout protocol). - Worker configures its stderr handler with the same emoji prefixes plus a worker[pid] tag, and the config-loaded info message is removed.
38 lines
1009 B
Python
38 lines
1009 B
Python
"""Shared log formatting helpers with no Sanic dependency.
|
||
|
||
Used by the main process (cista.sanic_logging) and by the preview worker
|
||
subprocess, which must not import Sanic.
|
||
"""
|
||
|
||
import logging
|
||
import unicodedata
|
||
|
||
LEVEL_EMOJI = {
|
||
logging.DEBUG: "🔍",
|
||
logging.INFO: "ℹ️", # noqa: RUF001
|
||
logging.WARNING: "⚠️",
|
||
logging.ERROR: "🛑",
|
||
logging.CRITICAL: "🛑",
|
||
}
|
||
|
||
|
||
def display_width(text: str) -> int:
|
||
return sum(
|
||
1 + (unicodedata.east_asian_width(c) in "FW")
|
||
for c in text
|
||
if unicodedata.category(c) != "Mn"
|
||
)
|
||
|
||
|
||
def format_level_prefix(levelno: int) -> str:
|
||
emoji = LEVEL_EMOJI.get(levelno, "▪️")
|
||
prefix = f"{emoji} "
|
||
return prefix + (" " * max(0, 3 - display_width(prefix)))
|
||
|
||
|
||
class EmojiFormatter(logging.Formatter):
|
||
"""Compact formatter: emoji + message, no timestamp/level text/logger name."""
|
||
|
||
def format(self, record: logging.LogRecord) -> str:
|
||
return format_level_prefix(record.levelno) + record.getMessage()
|