import os from dotenv import load_dotenv, find_dotenv load_dotenv(find_dotenv()) # logger_config.py import logging from logging.handlers import RotatingFileHandler import os # from nemo.utils.nemo_logging import Logger # nemo_logger = Logger() # nemo_logger.remove_stream_handlers() DEBUG = os.getenv("DEBUG", "false").lower() == "true" # Create "logs" directory if it doesn't exist os.makedirs("logs", exist_ok=True) logger = logging.getLogger("app_logger") # unique name logger.setLevel(logging.DEBUG if DEBUG else logging.INFO) # Avoid duplicate handlers if not logger.handlers: formatter = logging.Formatter("%(asctime)s | %(levelname)s | %(module)s | %(message)s") # Console handler console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG if DEBUG else logging.INFO) console_handler.setFormatter(formatter) logger.addHandler(console_handler) # File handler file_handler = RotatingFileHandler("logs/app.log", maxBytes=2 * 1024 * 1024, backupCount=5) file_handler.setLevel(logging.DEBUG if DEBUG else logging.INFO) file_handler.setFormatter(formatter) logger.addHandler(file_handler) # Startup message logger.debug("Logger initialized (DEBUG)") if DEBUG else logger.info("Logger initialized (Production Mode)") # --- Logger Silencing Function --- def silence_logger(logger_name: str | None, level=logging.ERROR): """Sets the log level and removes StreamHandlers for a given logger.""" target_logger = logging.getLogger(logger_name) target_logger.setLevel(level) for handler in target_logger.handlers[:]: if isinstance(handler, logging.StreamHandler): target_logger.removeHandler(handler) # Ensure messages don't propagate to the parent (root) logger target_logger.propagate = False # silence_logger(None, logging.CRITICAL) # logger.propagate = True # silence_logger("nemo_logger", logging.CRITICAL) # silence_logger("pytorch_lightning", logging.ERROR)