From 76438459f78edfa6a34cb835f75741371af61379 Mon Sep 17 00:00:00 2001 From: DLmaster361 Date: Mon, 4 Aug 2025 10:46:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8E=A5=E5=85=A5logger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 5 +- app/api/api.py | 5 +- app/core/MAA.py | 0 app/core/__init__.py | 3 +- app/core/config.py | 43 +++---------- app/models/test.py | 59 ----------------- app/{core/logger.py => utils/__init__.py} | 9 ++- app/utils/config.py | 77 ----------------------- app/utils/logger.py | 60 ++++++------------ main.py | 6 +- 10 files changed, 45 insertions(+), 222 deletions(-) delete mode 100644 app/core/MAA.py delete mode 100644 app/models/test.py rename app/{core/logger.py => utils/__init__.py} (83%) delete mode 100644 app/utils/config.py diff --git a/app/__init__.py b/app/__init__.py index 68967d1..e14213d 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -24,6 +24,7 @@ __author__ = "DLmaster361 " __license__ = "GPL-3.0 license" from .api import app -from .core import Config, logger +from .core import Config +from .utils import get_logger -__all__ = ["app", "Config", "logger"] +__all__ = ["app", "Config", "get_logger"] diff --git a/app/api/api.py b/app/api/api.py index 5bd5f80..1c8891a 100644 --- a/app/api/api.py +++ b/app/api/api.py @@ -5,7 +5,10 @@ from datetime import datetime from fastapi.middleware.cors import CORSMiddleware -from app.core import Config, logger +from app.core import Config +from app.utils import get_logger + +logger = get_logger("API 模块") app = FastAPI( title="AUTO_MAA", diff --git a/app/core/MAA.py b/app/core/MAA.py deleted file mode 100644 index e69de29..0000000 diff --git a/app/core/__init__.py b/app/core/__init__.py index a87134e..d289d5e 100644 --- a/app/core/__init__.py +++ b/app/core/__init__.py @@ -23,6 +23,5 @@ __author__ = "DLmaster361 " __license__ = "GPL-3.0 license" from .config import Config -from .logger import logger -__all__ = ["Config", "logger"] +__all__ = ["Config"] diff --git a/app/core/config.py b/app/core/config.py index 708c1b4..47ddd4b 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -34,7 +34,7 @@ from pathlib import Path from typing import Union, Dict, List, Literal -from .logger import logger +from app.utils import get_logger from app.models.ConfigBase import * @@ -593,7 +593,13 @@ class AppConfig(GlobalConfig): # self.if_ignore_silence = False # self.if_database_opened = False - self.init_logger() + self.logger = get_logger("配置管理") + self.logger.info("") + self.logger.info("===================================") + self.logger.info("AUTO_MAA 后端应用程序") + self.logger.info(f"版本号: v{self.VERSION}") + self.logger.info(f"根目录: {self.root_path}") + self.logger.info("===================================") # 检查目录 self.log_path.parent.mkdir(parents=True, exist_ok=True) @@ -616,38 +622,7 @@ class AppConfig(GlobalConfig): await self.QueueConfig.connect(self.config_path / "QueueConfig.json") # self.check_data() - logger.info("程序初始化完成", module="配置管理") - - def init_logger(self) -> None: - """初始化日志记录器""" - - logger.add( - sink=self.log_path, - level="DEBUG", - format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {extra[module]} | {message}", - enqueue=True, - backtrace=True, - diagnose=True, - rotation="1 week", - retention="1 month", - compression="zip", - ) - logger.add( - sink=sys.stderr, - level="DEBUG", - format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {extra[module]} | {message}", - enqueue=True, - backtrace=True, - diagnose=True, - colorize=True, - ) - - logger.info("", module="配置管理") - logger.info("===================================", module="配置管理") - logger.info("AUTO_MAA 后端", module="配置管理") - logger.info(f"版本号: v{self.VERSION}", module="配置管理") - logger.info(f"根目录: {self.root_path}", module="配置管理") - logger.info("===================================", module="配置管理") + self.logger.info("程序初始化完成") async def add_script( self, script: Literal["MAA", "General"] diff --git a/app/models/test.py b/app/models/test.py deleted file mode 100644 index 53669b2..0000000 --- a/app/models/test.py +++ /dev/null @@ -1,59 +0,0 @@ -import ConfigBase -from typing import Dict, Union, List -import uuid -from pathlib import Path - - -class TConfig(ConfigBase.ConfigBase): - - def __init__(self): - super().__init__() - - self.Main_Name = ConfigBase.ConfigItem("Main", "Name", "Default Name") - - -class TestConfig(ConfigBase.ConfigBase): - - Main_Name = ConfigBase.ConfigItem("Main", "Name", "Default Name") - Bool_Enabled = ConfigBase.ConfigItem( - "Bool", "Enabled", False, ConfigBase.BoolValidator() - ) - - Mt = ConfigBase.MultipleConfig([TConfig]) - - -root = Path.cwd() - -test_config = TestConfig() - -test_config.connect(root / "config.json") - - -test_config.set("Main", "Name", "New Name") -test_config.set("Bool", "Enabled", "qqq") - - -mt_test = ConfigBase.MultipleConfig([TestConfig]) - -mt_test.connect(root / "mt_config.json") - - -tc = mt_test.add(TestConfig) - - -for uid, config in mt_test.items(): - print(uid, config.toDict()) - config.set("Main", "Name", "Updated Name") - -print(mt_test.toDict()) - -mt_test.add(TestConfig) -mt_test.setOrder(list(mt_test.keys())[::-1]) - -print(mt_test.toDict()) - - -print("---------------------------------------------") - -k: TestConfig = mt_test.add(TestConfig) -print(k.Mt.toDict()) diff --git a/app/core/logger.py b/app/utils/__init__.py similarity index 83% rename from app/core/logger.py rename to app/utils/__init__.py index be168d4..d08c8aa 100644 --- a/app/core/logger.py +++ b/app/utils/__init__.py @@ -18,8 +18,11 @@ # Contact: DLmaster_361@163.com +__version__ = "5.0.0" +__author__ = "DLmaster361 " +__license__ = "GPL-3.0 license" -from loguru import logger as _logger -logger = _logger.patch(lambda record: record["extra"].setdefault("module", "未知模块")) -logger.remove(0) +from .logger import get_logger + +__all__ = ["get_logger"] diff --git a/app/utils/config.py b/app/utils/config.py deleted file mode 100644 index 0946275..0000000 --- a/app/utils/config.py +++ /dev/null @@ -1,77 +0,0 @@ -''' -配置文件管理, 使用yaml格式\n -注意: 此文件仅处理程序配置项而非用户配置 -''' - -from pathlib import Path -from typing import Any, ClassVar -import yaml -from pydantic import BaseModel - -class BaseYAMLConfig(BaseModel): - # 必要项 - CONFIG_PATH: ClassVar[Path] - - @classmethod - def load(cls, config_path: Path | None = None) -> "BaseYAMLConfig": - """ - 从 YAML 文件加载配置。如果文件不存在或为空,则使用类中定义的默认值。 - """ - # 使用传入路径或类变量路径 - if not cls.CONFIG_PATH: - raise ValueError("CONFIG_PATH必须被设置") - path = (config_path or cls.CONFIG_PATH).resolve() - - if not path.exists(): - # print(f"[Warning] Config file '{path}' not found. Using default values.") - data: dict[str, Any] = {} - else: - try: - with open(path, "r", encoding="utf-8") as f: - data = yaml.safe_load(f) - if data is None: - data = {} - if not isinstance(data, dict): - raise ValueError(f"Expected dict in {path}, got {type(data)}") - except Exception as e: - raise RuntimeError(f"Failed to load config from {path}: {e}") - - try: - return cls.model_validate(data) - except Exception as e: - raise ValueError(f"Invalid config for {cls.__name__}: {e}") - - -class LogConfig (BaseModel): - """ - 日志配置 - """ - CONFIG_PATH:ClassVar[Path] = Path("config.yaml") - - level: str = "DEBUG" - writelevel: str = "INFO" - log_dir: str = "logs" - max_size: int = 10 - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/utils/logger.py b/app/utils/logger.py index 073bdf4..90275a8 100644 --- a/app/utils/logger.py +++ b/app/utils/logger.py @@ -1,45 +1,36 @@ from loguru import logger as _logger import sys -import os -from app.utils.config import LogConfig +from pathlib import Path -config = LogConfig() -LOG_DIR = config.log_dir -os.makedirs(LOG_DIR, exist_ok=True) +(Path.cwd() / "debug").mkdir(parents=True, exist_ok=True) _logger.remove() -console_format = ( - "{time:YYYY-MM-DD HH:mm:ss}| " - "{level: <8} | " - "{extra[module]}- {message}" + +_logger.add( + sink=Path.cwd() / "debug/app.log", + level="INFO", + format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {extra[module]} | {message}", + enqueue=True, + backtrace=True, + diagnose=True, + rotation="1 week", + retention="1 month", + compression="zip", ) _logger.add( sink=sys.stderr, - format=console_format, - level=config.level, + level="DEBUG", + format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {extra[module]} | {message}", + enqueue=True, + backtrace=True, + diagnose=True, colorize=True, - enqueue=True, ) - - -file_format = "{time:YYYY-MM-DD HH:mm:ss}| {level: <8} | {extra[module]}- {message}" - -_logger.add( - sink=os.path.join(LOG_DIR, "app_{time:YYYY-MM-DD}.log"), - format=file_format, - level=config.writelevel, - rotation="00:00", - retention="7 days", - colorize=False, - encoding="utf-8", - enqueue=True, -) - _logger = _logger.patch(lambda record: record["extra"].setdefault("module", "未知模块")) @@ -53,18 +44,3 @@ def get_logger(module_name: str): __all__ = ["get_logger"] - - -if __name__ == "__main__": - logger = get_logger("test1") - logger.debug("调试信息(只在控制台显示)") - logger.info("这是普通信息(控制台 + 文件)") - logger.warning("这是警告") - logger.error("发生错误") - logger2 = get_logger("test2") - logger2.error("发生错误") - - try: - _ = 1 / 0 - except Exception: - logger.exception("捕获异常") diff --git a/main.py b/main.py index 1a0138d..fce6f1e 100644 --- a/main.py +++ b/main.py @@ -23,7 +23,9 @@ import os import sys import ctypes -from app.core.logger import logger +from app.utils import get_logger + +logger = get_logger("主程序") def is_admin() -> bool: @@ -34,7 +36,7 @@ def is_admin() -> bool: return False -# @logger.catch +@logger.catch def main(): if is_admin():