diff --git a/src/core/__init__.py b/src/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/core/logger.py b/src/core/logger.py new file mode 100644 index 0000000..21a6af9 --- /dev/null +++ b/src/core/logger.py @@ -0,0 +1,47 @@ +import logging +import logging.config +import os +import yaml +from pathlib import Path + +TRACE_LEVEL_NUM = 5 +logging.addLevelName(TRACE_LEVEL_NUM, "TRACE") + +def trace(self, message, *args, **kws): + """ + Trace для логирования + Args: + message (_type_): сообщение + """ + if self.isEnabledFor(TRACE_LEVEL_NUM): + self._log(TRACE_LEVEL_NUM, message, args, **kws) + +logging.Logger.trace = trace + +def setup_logging(): + """ + Сетапит логирование по конфигу + Папки конфига захардкодены внутри проекта + """ + env = os.getenv("ENVIRONMENT", "dev").lower() + root_dir = Path(__file__).resolve().parent.parent.parent # .parent.parent.parent -> AGENT (корень проекта) + config_path = root_dir / "configs" / f"logging_{env}.yaml" + + if config_path.exists(): + with open(config_path, "rt", encoding="utf-8") as f: + try: + config = yaml.safe_load(f) + logging.config.dictConfig(config) + logging.getLogger(__name__).info(f"Логирование настроено из: {config_path}") + except Exception as e: + print(f"Ошибка при парсинге {config_path}: {e}") + logging.basicConfig(level=logging.INFO) + else: + print(f"ВНИМАНИЕ: Конфиг {config_path} не найден. Базовая настройка (INFO).") + logging.basicConfig(level=logging.INFO) + + +setup_logging() + +def get_logger(name: str) -> logging.Logger: + return logging.getLogger(name) \ No newline at end of file