Spaces:
Sleeping
Sleeping
| import logging | |
| import sys | |
| from pythonjsonlogger import jsonlogger | |
| import os | |
| from datetime import datetime | |
| def setup_logging(): | |
| """Setup structured logging for the application""" | |
| # Get log level from environment, default to INFO | |
| log_level = os.getenv('LOG_LEVEL', 'INFO').upper() | |
| # Create a custom JSON formatter | |
| json_formatter = jsonlogger.JsonFormatter( | |
| '%(asctime)s %(name)s %(levelname)s %(filename)s %(lineno)d %(message)s', | |
| datefmt='%Y-%m-%dT%H:%M:%S' | |
| ) | |
| # Setup root logger | |
| root_logger = logging.getLogger() | |
| root_logger.setLevel(getattr(logging, log_level)) | |
| # Clear any existing handlers | |
| root_logger.handlers.clear() | |
| # Create handler for stdout | |
| handler = logging.StreamHandler(sys.stdout) | |
| handler.setFormatter(json_formatter) | |
| root_logger.addHandler(handler) | |
| # Also setup specific loggers for different components | |
| logging.getLogger('uvicorn').setLevel(getattr(logging, log_level)) | |
| logging.getLogger('uvicorn.access').setLevel(getattr(logging, log_level)) | |
| logging.getLogger('uvicorn.error').setLevel(getattr(logging, log_level)) | |
| logging.getLogger('fastapi').setLevel(getattr(logging, log_level)) | |
| logging.getLogger('sqlalchemy').setLevel(logging.WARNING) # Reduce SQLAlchemy noise | |
| logging.getLogger('confluent_kafka').setLevel(getattr(logging, log_level)) | |
| def get_logger(name: str) -> logging.Logger: | |
| """Get a logger instance with the specified name""" | |
| return logging.getLogger(name) | |
| # Initialize logging when module is imported | |
| setup_logging() |