diff --git a/astrbot/api/__init__.py b/astrbot/api/__init__.py index 5d15dedc20..64a2b601b3 100644 --- a/astrbot/api/__init__.py +++ b/astrbot/api/__init__.py @@ -3,9 +3,12 @@ from astrbot.core.agent.tool import FunctionTool, ToolSet from astrbot.core.agent.tool_executor import BaseFunctionToolExecutor from astrbot.core.config.astrbot_config import AstrBotConfig +from astrbot.core.log import get_loguru_logger from astrbot.core.star.register import register_agent as agent from astrbot.core.star.register import register_llm_tool as llm_tool +loguru_logger = get_loguru_logger() + __all__ = [ "AstrBotConfig", "BaseFunctionToolExecutor", @@ -15,5 +18,6 @@ "html_renderer", "llm_tool", "logger", + "loguru_logger", "sp", ] diff --git a/astrbot/core/log.py b/astrbot/core/log.py index 3dd0719b11..9196eb807c 100644 --- a/astrbot/core/log.py +++ b/astrbot/core/log.py @@ -59,6 +59,21 @@ def _is_plugin_path(pathname: str | None) -> bool: return ("data/plugins" in norm_path) or ("astrbot/builtin_stars/" in norm_path) +def _get_plugin_tag(pathname: str | None) -> str: + if not pathname: + return "[Core]" + norm_path = os.path.normpath(pathname) + for prefix in ( + "data" + os.sep + "plugins" + os.sep, + "astrbot" + os.sep + "builtin_stars" + os.sep, + ): + if prefix in norm_path: + idx = norm_path.index(prefix) + len(prefix) + plugin_name = norm_path[idx:].split(os.sep)[0] + return f"[{plugin_name}]" + return "[Core]" + + def _get_short_level_name(level_name: str) -> str: level_map = { "DEBUG": "DBUG", @@ -81,7 +96,7 @@ def _build_source_file(pathname: str | None) -> str: def _patch_record(record: "Record") -> None: extra = record["extra"] - extra.setdefault("plugin_tag", "[Core]") + extra.setdefault("plugin_tag", _get_plugin_tag(record["file"].path)) extra.setdefault("short_levelname", _get_short_level_name(record["level"].name)) level_no = record["level"].no extra.setdefault("astrbot_version_tag", f" [v{VERSION}]" if level_no >= 30 else "") @@ -415,3 +430,8 @@ def configure_trace_logger(cls, config: dict | None) -> None: backup_count=3, trace=True, ) + + +def get_loguru_logger(): + """Returns the patched loguru logger for plugin use.""" + return _loguru