datacentric-env / server /logger.py
Aswini-Kumar's picture
Upload server/logger.py with huggingface_hub
c30a2f3 verified
"""
server/logger.py — Structured JSON logging for all environment events.
Every reset, step, query, apply, and error is logged with full context.
"""
import json
import logging
import sys
import time
from server.config import cfg
def _json_formatter(record: logging.LogRecord) -> str:
payload = {
"ts": round(time.time(), 3),
"level": record.levelname,
"msg": record.getMessage(),
}
if hasattr(record, "extra"):
payload.update(record.extra)
return json.dumps(payload)
class _JsonHandler(logging.StreamHandler):
def emit(self, record: logging.LogRecord):
try:
print(_json_formatter(record), file=sys.stdout, flush=True)
except Exception:
self.handleError(record)
def get_logger(name: str) -> logging.Logger:
logger = logging.getLogger(name)
if not logger.handlers:
logger.setLevel(getattr(logging, cfg.LOG_LEVEL, logging.INFO))
logger.addHandler(_JsonHandler())
logger.propagate = False
return logger
def log_event(logger: logging.Logger, event: str, **kwargs):
"""Log a structured event with arbitrary key-value context."""
record = logging.LogRecord(
name=logger.name, level=logging.INFO,
pathname="", lineno=0, msg=event, args=(), exc_info=None,
)
record.extra = {"event": event, **kwargs}
logger.handle(record)