Source code for itasc.core.logging
"""StageLogger — JSON-lines logger writing to per-position pipeline.log."""
from __future__ import annotations
import json
from datetime import datetime, timezone
from pathlib import Path
[docs]
class StageLogger:
"""Context manager that appends JSON-lines entries to pipeline.log."""
def __init__(
self,
pipeline_log: Path,
stage_name: str,
) -> None:
self._pipeline_log = pipeline_log
self._stage_name = stage_name
def _write(self, level: str, message: str) -> None:
entry = json.dumps(
{
"ts": datetime.now(timezone.utc).isoformat(),
"stage": self._stage_name,
"level": level,
"message": message,
}
)
self._pipeline_log.parent.mkdir(parents=True, exist_ok=True)
with self._pipeline_log.open("a", encoding="utf-8") as fh:
fh.write(entry + "\n")
[docs]
def info(self, message: str) -> None:
self._write("INFO", message)
[docs]
def warning(self, message: str) -> None:
self._write("WARNING", message)
[docs]
def error(self, message: str) -> None:
self._write("ERROR", message)
def __enter__(self) -> StageLogger:
self.info("Stage started")
return self
def __exit__(self, exc_type, exc_val, exc_tb) -> bool:
if exc_type is None:
self.info("Stage completed successfully")
else:
self.error(f"Stage failed: {exc_val}")
return False