Spaces:
Running
Running
File size: 1,485 Bytes
b6f9fa8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | """
src/__init__.py — Package initializer and logging setup.
Runs once on first `import src`. Sets up logging from config.yaml.
(SRS Section 13)
"""
import logging
import os
def _setup_logging() -> None:
"""Configure root logger. No-op if handlers already exist."""
os.makedirs("logs", exist_ok=True)
log_level = logging.INFO
log_format = "%(asctime)s [%(levelname)s] %(name)s: %(message)s"
log_file = "logs/medirag.log"
# Try to load level from config.yaml
try:
import yaml
with open("config.yaml", "r") as f:
cfg = yaml.safe_load(f)
level_str = cfg.get("logging", {}).get("level", "INFO")
log_level = getattr(logging, level_str.upper(), logging.INFO)
log_file = cfg.get("logging", {}).get("file", log_file)
log_format = cfg.get("logging", {}).get("format", log_format)
except Exception:
pass # Use defaults if config not found (e.g., during tests)
root = logging.getLogger()
if root.handlers:
return # Already configured — don't add duplicate handlers
handlers: list[logging.Handler] = [logging.StreamHandler()]
try:
os.makedirs(os.path.dirname(log_file), exist_ok=True)
handlers.append(logging.FileHandler(log_file, encoding="utf-8"))
except Exception:
pass # File logging optional — don't fail on permission errors
logging.basicConfig(level=log_level, format=log_format, handlers=handlers)
_setup_logging()
|