feat(logger)

This commit is contained in:
SXP-Simon
2026-02-08 23:28:56 +08:00
parent b8ea7adf5a
commit e73fd99e26
31 changed files with 100 additions and 72 deletions
+9 -4
View File
@@ -17,11 +17,16 @@ sys.path.insert(0, project_root)
print(f"Project Root: {project_root}")
# Mock logger before importing anything that uses it
from astrbot.api import logger # noqa: E402
# Mock logger
from data.plugins.astrbot_plugin_qq_group_daily_analysis.src.utils import (
logger as plugin_logger_module,
)
logger.info = lambda msg, *args, **kwargs: print(f"[INFO] {msg}")
logger.error = lambda msg, *args, **kwargs: print(f"[ERROR] {msg}")
logger.warning = lambda msg, *args, **kwargs: print(f"[WARN] {msg}")
plugin_logger_module.logger.info = lambda msg, *args, **kwargs: print(f"[INFO] {msg}")
plugin_logger_module.logger.error = lambda msg, *args, **kwargs: print(f"[ERROR] {msg}")
plugin_logger_module.logger.warning = lambda msg, *args, **kwargs: print(
f"[WARN] {msg}"
)
# Now import plugin modules
try:
+1 -1
View File
@@ -6,7 +6,7 @@
from abc import ABC, abstractmethod
from typing import Any
from astrbot.api import logger
from ...utils.logger import logger
from ...models.data_models import TokenUsage
from ..utils.json_utils import parse_json_response
@@ -5,7 +5,7 @@
from datetime import datetime
from astrbot.api import logger
from ...utils.logger import logger
from ...models.data_models import GoldenQuote, TokenUsage
from ..utils import InfoUtils
+1 -1
View File
@@ -6,7 +6,7 @@
import re
from datetime import datetime
from astrbot.api import logger
from ...utils.logger import logger
from ...models.data_models import SummaryTopic, TokenUsage
from ..utils import InfoUtils
@@ -3,7 +3,7 @@
专门处理用户称号和MBTI类型分析
"""
from astrbot.api import logger
from ...utils.logger import logger
from ...models.data_models import TokenUsage, UserTitle
from ..utils.json_utils import extract_user_titles_with_regex
+1 -1
View File
@@ -5,7 +5,7 @@ LLM分析器模块
import asyncio
from astrbot.api import logger
from ..utils.logger import logger
from ..models.data_models import GoldenQuote, SummaryTopic, TokenUsage, UserTitle
from .analyzers.golden_quote_analyzer import GoldenQuoteAnalyzer
+1 -1
View File
@@ -6,7 +6,7 @@ JSON处理工具模块
import json
import re
from astrbot.api import logger
from ...utils.logger import logger
def fix_json(text: str) -> str:
+1 -1
View File
@@ -6,7 +6,7 @@ LLM API请求处理工具模块
import asyncio
from typing import Any
from astrbot.api import logger
from ...utils.logger import logger
from ...utils.resilience import CircuitBreaker, global_llm_rate_limiter
+3 -5
View File
@@ -12,7 +12,7 @@
from typing import Optional, List, Dict, Any
from dataclasses import dataclass
from astrbot.api import logger
from ..utils.logger import logger
from ..domain.value_objects.unified_message import UnifiedMessage
from ..domain.value_objects.platform_capabilities import PlatformCapabilities
@@ -23,6 +23,7 @@ from .message_converter import MessageConverter
@dataclass
class AnalysisConfig:
"""分析操作配置"""
days: int = 1
max_messages: int = 1000
min_messages_threshold: int = 10
@@ -124,10 +125,7 @@ class AnalysisOrchestrator:
effective_count = caps.get_effective_count(max_count)
if effective_days < days:
logger.info(
f"平台限制:请求 {days} 天,"
f"实际使用 {effective_days}"
)
logger.info(f"平台限制:请求 {days} 天,实际使用 {effective_days}")
return await self.adapter.fetch_messages(
group_id=group_id,
+4 -2
View File
@@ -7,7 +7,7 @@
from datetime import datetime
from typing import Any, Dict, List, Optional
from astrbot.api import logger
from ..utils.logger import logger
from ..domain.services import ReportGenerator
from ..domain.value_objects.topic import Topic
@@ -78,7 +78,9 @@ class ReportingService:
statistics=statistics,
topics=topics if self.config.get_include_topics() else [],
user_titles=user_titles if self.config.get_include_user_titles() else [],
golden_quotes=golden_quotes if self.config.get_include_golden_quotes() else [],
golden_quotes=golden_quotes
if self.config.get_include_golden_quotes()
else [],
include_header=True,
include_footer=True,
)
+6 -2
View File
@@ -9,10 +9,14 @@ import asyncio
from datetime import datetime, timedelta
from typing import Any, Callable, Dict, List, Optional, Set
from astrbot.api import logger
from ..utils.logger import logger
from ..infrastructure.config import ConfigManager
from ..shared.constants import TASK_STATE_PENDING, TASK_STATE_RUNNING, TASK_STATE_COMPLETED
from ..shared.constants import (
TASK_STATE_PENDING,
TASK_STATE_RUNNING,
TASK_STATE_COMPLETED,
)
class ScheduledTask:
+1 -1
View File
@@ -7,7 +7,7 @@ Bot实例管理模块
from typing import Any, Optional
from astrbot.api import logger
from ..utils.logger import logger
from ..infrastructure.platform import PlatformAdapter, PlatformAdapterFactory
+1 -1
View File
@@ -7,7 +7,7 @@
import datetime
from typing import Any
from astrbot.api import logger
from ..utils.logger import logger
class HistoryManager:
+1 -1
View File
@@ -6,7 +6,7 @@
from collections import defaultdict
from datetime import datetime, timedelta
from astrbot.api import logger
from ..utils.logger import logger
from ..models.data_models import EmojiStatistics, GroupStatistics, TokenUsage
from ..visualization.activity_charts import ActivityVisualizer
+1 -1
View File
@@ -2,7 +2,7 @@ import base64
import aiohttp
from astrbot.api import logger
from ..utils.logger import logger
from ..utils.trace_context import TraceContext
+1 -1
View File
@@ -7,7 +7,7 @@
from typing import Any, Dict, List, Optional
from astrbot.api import logger
from ...utils.logger import logger
class ConfigManager:
+4 -2
View File
@@ -7,7 +7,7 @@ LLM 客户端 - 包装 AstrBot 的 LLM 提供商系统
from typing import Any, Dict, List, Optional, Tuple
from astrbot.api import logger
from ...utils.logger import logger
from ...domain.value_objects.statistics import TokenUsage
from ...domain.exceptions import LLMException, LLMRateLimitException
@@ -110,7 +110,9 @@ class LLMClient:
if hasattr(response, "completion_text"):
response_text = response.completion_text
elif isinstance(response, dict):
response_text = response.get("completion_text", response.get("text", ""))
response_text = response.get(
"completion_text", response.get("text", "")
)
else:
response_text = str(response)
@@ -11,7 +11,7 @@ from datetime import datetime
from pathlib import Path
from typing import Any, Dict, List, Optional
from astrbot.api import logger
from ...utils.logger import logger
class HistoryRepository:
@@ -121,9 +121,7 @@ class HistoryRepository:
history = self.load_group_history(group_id)
return history.get("daily", {}).get(date_str)
def get_recent_results(
self, group_id: str, limit: int = 7
) -> List[Dict[str, Any]]:
def get_recent_results(self, group_id: str, limit: int = 7) -> List[Dict[str, Any]]:
"""
获取最近的分析结果。
+7 -4
View File
@@ -2,7 +2,9 @@
平台适配器工厂
"""
from typing import Optional, Any, Dict, Type
from typing import Any, Dict, List, Optional, Type
from ...utils.logger import logger
from .base import PlatformAdapter
@@ -49,8 +51,7 @@ class PlatformAdapterFactory:
return adapter_class(bot_instance, config)
except Exception:
# 记录异常,但不崩溃
import logging
logging.getLogger(__name__).error(f"{platform_name} 创建适配器时出错", exc_info=True)
logger.error(f"{platform_name} 创建适配器时出错", exc_info=True)
return None
@classmethod
@@ -68,6 +69,7 @@ class PlatformAdapterFactory:
def _register_adapters():
try:
from .adapters.onebot_adapter import OneBotAdapter
PlatformAdapterFactory.register("aiocqhttp", OneBotAdapter)
PlatformAdapterFactory.register("onebot", OneBotAdapter)
except ImportError:
@@ -75,8 +77,9 @@ def _register_adapters():
try:
from .adapters.discord_adapter import DiscordAdapter
PlatformAdapterFactory.register("discord", DiscordAdapter)
PlatformAdapterFactory.register("discord_bot", DiscordAdapter) # 添加别名
PlatformAdapterFactory.register("discord_bot", DiscordAdapter) # 添加别名
except ImportError:
pass
@@ -9,7 +9,7 @@ from dataclasses import dataclass, field
from enum import Enum
from typing import Callable, Optional
from astrbot.api import logger
from ...utils.logger import logger
class CircuitState(Enum):
@@ -9,7 +9,7 @@ import time
from dataclasses import dataclass, field
from typing import Optional
from astrbot.api import logger
from ...utils.logger import logger
@dataclass
+1 -1
View File
@@ -10,7 +10,7 @@ from dataclasses import dataclass
from functools import wraps
from typing import Callable, Optional, Tuple, Type, Union
from astrbot.api import logger
from ...utils.logger import logger
@dataclass
+1 -1
View File
@@ -1,7 +1,7 @@
from collections.abc import Callable
from typing import Any
from astrbot.api import logger
from ..utils.logger import logger
from ..utils.trace_context import TraceContext
+1 -1
View File
@@ -10,7 +10,7 @@ from pathlib import Path
import aiohttp
from astrbot.api import logger
from ..utils.logger import logger
from ..visualization.activity_charts import ActivityVisualizer
from .templates import HTMLTemplates
+1 -1
View File
@@ -9,7 +9,7 @@ import threading
from jinja2 import Environment, FileSystemLoader, select_autoescape
from astrbot.api import logger
from ..utils.logger import logger
class HTMLTemplates:
+1 -1
View File
@@ -8,7 +8,7 @@ import weakref
from apscheduler.triggers.cron import CronTrigger
from astrbot.api import logger
from ..utils.logger import logger
from ..core.message_sender import MessageSender
from ..reports.dispatcher import ReportDispatcher
+1 -1
View File
@@ -6,7 +6,7 @@ import aiohttp
from collections.abc import Callable
from dataclasses import dataclass
from astrbot.api import logger
from ..utils.logger import logger
@dataclass
+1 -1
View File
@@ -5,7 +5,7 @@
import asyncio
from astrbot.api import logger
from .logger import logger
from ..analysis.llm_analyzer import LLMAnalyzer
from ..analysis.statistics import UserAnalyzer
+16
View File
@@ -0,0 +1,16 @@
import logging
from astrbot.api import logger as astrbot_logger
class PluginLoggerAdapter(logging.LoggerAdapter):
"""
插件日志适配器
自动为日志添加 [QQ群分析] 前缀,方便区分
"""
def process(self, msg, kwargs):
return f"[QQ群分析] {msg}", kwargs
# 导出带前缀的 logger
logger = PluginLoggerAdapter(astrbot_logger, {})
+1 -1
View File
@@ -7,7 +7,7 @@ import asyncio
import sys
from concurrent.futures import ThreadPoolExecutor
from astrbot.api import logger
from .logger import logger
class PDFInstaller:
+1 -1
View File
@@ -1,7 +1,7 @@
import asyncio
import time
from astrbot.api import logger
from .logger import logger
class CircuitBreaker: