diff --git a/ms_agent/skill/auto_skills.py b/ms_agent/skill/auto_skills.py index 17192ae75..170c49c91 100644 --- a/ms_agent/skill/auto_skills.py +++ b/ms_agent/skill/auto_skills.py @@ -3,6 +3,7 @@ # yapf: disable import asyncio import logging +import os import re from dataclasses import dataclass, field from pathlib import Path @@ -39,6 +40,15 @@ def _configure_logger_to_dir(log_dir: Path) -> None: log_dir.mkdir(parents=True, exist_ok=True) log_file = log_dir / 'ms_agent.log' + # Get current log level from environment + log_level_str = os.getenv('LOG_LEVEL', 'INFO').upper() + log_level = getattr(logging, log_level_str, logging.INFO) + + # Update logger level to respect current LOG_LEVEL env var + logger.setLevel(log_level) + for handler in logger.handlers: + handler.setLevel(log_level) + # Check if file handler for this path already exists for handler in logger.handlers: if isinstance(handler, logging.FileHandler): @@ -52,7 +62,7 @@ def _configure_logger_to_dir(log_dir: Path) -> None: file_handler = logging.FileHandler(str(log_file), mode='a') file_handler.setFormatter(logging.Formatter('[%(levelname)s:%(name)s] %(message)s')) - file_handler.setLevel(logger.level) + file_handler.setLevel(log_level) logger.addHandler(file_handler) logger.info(f'Logger configured to output to: {log_file}') diff --git a/ms_agent/utils/logger.py b/ms_agent/utils/logger.py index 2da875103..0ac9d48a8 100644 --- a/ms_agent/utils/logger.py +++ b/ms_agent/utils/logger.py @@ -53,6 +53,10 @@ def get_logger(log_file: Optional[str] = None, logger = logging.getLogger(logger_name) logger.propagate = False if logger_name in init_loggers: + # Update log level dynamically to respect current LOG_LEVEL env var + logger.setLevel(log_level) + for handler in logger.handlers: + handler.setLevel(log_level) add_file_handler_if_needed(logger, log_file, file_mode, log_level) return logger @@ -124,3 +128,28 @@ def add_file_handler_if_needed(logger, log_file, file_mode, log_level): file_handler.setFormatter(logger_format) file_handler.setLevel(log_level) logger.addHandler(file_handler) + + +def refresh_log_level(target_logger=None): + """ + Refresh logger level from LOG_LEVEL environment variable. + + This is useful when LOG_LEVEL is changed after the logger was initialized. + + Args: + target_logger: Logger to refresh. If None, uses the default logger. + + Returns: + The new log level (as int). + """ + if target_logger is None: + target_logger = logger + + log_level_str = os.getenv('LOG_LEVEL', 'INFO').upper() + log_level_int = getattr(logging, log_level_str, logging.INFO) + + target_logger.setLevel(log_level_int) + for handler in target_logger.handlers: + handler.setLevel(log_level_int) + + return log_level_int