Files
opus-orchestrator-ai/opus_orchestrator/logging.py
T
mrhavens b52739ca5c fix(logging): Add structured logging module
- Created logging.py with:
  - setup_logging() function
  - Configurable levels
  - Console and file handlers
  - Structured format

This addresses the logging gap.
2026-03-14 05:37:19 +00:00

62 lines
1.5 KiB
Python

"""Logging configuration for Opus.
Structured logging with levels, formats, and handlers.
"""
import logging
import sys
from pathlib import Path
def setup_logging(
level: str = "INFO",
log_file: str = None,
format: str = "%(asctime)s | %(levelname)-8s | %(name)s | %(message)s",
) -> logging.Logger:
"""Setup structured logging for Opus.
Args:
level: DEBUG, INFO, WARNING, ERROR
log_file: Optional file path
format: Log message format
Returns:
Configured logger
"""
# Create logger
logger = logging.getLogger("opus")
logger.setLevel(getattr(logging, level.upper()))
# Clear existing handlers
logger.handlers.clear()
# Console handler
console = logging.StreamHandler(sys.stdout)
console.setLevel(getattr(logging, level.upper()))
console.setFormatter(logging.Formatter(format))
logger.addHandler(console)
# File handler (optional)
if log_file:
log_path = Path(log_file)
log_path.parent.mkdir(parents=True, exist_ok=True)
file_handler = logging.FileHandler(log_file)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(logging.Formatter(
"%(asctime)s | %(levelname)-8s | %(name)s:%(lineno)d | %(message)s"
))
logger.addHandler(file_handler)
return logger
# Default logger
logger = setup_logging()
# Usage in modules:
# from opus_orchestrator.logging import logger
# logger.info("Starting generation")
# logger.error(f"Failed: {e}")