zhenxun_bot/zhenxun/services/log.py

341 lines
9.7 KiB
Python
Raw Normal View History

2024-02-04 04:18:54 +08:00
from datetime import datetime, timedelta
from typing import Any, Dict, overload
from nonebot import require
require("nonebot_plugin_session")
from loguru import logger as logger_
from nonebot.log import default_filter, default_format
from nonebot_plugin_session import Session
from zhenxun.configs.path_config import LOG_PATH
logger_.add(
LOG_PATH / f"{datetime.now().date()}.log",
level="INFO",
rotation="00:00",
format=default_format,
filter=default_filter,
retention=timedelta(days=30),
)
logger_.add(
LOG_PATH / f"error_{datetime.now().date()}.log",
level="ERROR",
rotation="00:00",
format=default_format,
filter=default_filter,
retention=timedelta(days=30),
)
class logger:
TEMPLATE_A = "Adapter[{}] {}"
TEMPLATE_B = "Adapter[{}] [<u><c>{}</c></u>]: {}"
TEMPLATE_C = "Adapter[{}] 用户[<u><e>{}</e></u>] 触发 [<u><c>{}</c></u>]: {}"
TEMPLATE_D = "Adapter[{}] 群聊[<u><e>{}</e></u>] 用户[<u><e>{}</e></u>] 触发 [<u><c>{}</c></u>]: {}"
TEMPLATE_E = "Adapter[{}] 群聊[<u><e>{}</e></u>] 用户[<u><e>{}</e></u>] 触发 [<u><c>{}</c></u>] [Target](<u><e>{}</e></u>): {}"
TEMPLATE_ADAPTER = "Adapter[<m>{}</m>] "
TEMPLATE_USER = "用户[<u><e>{}</e></u>] "
TEMPLATE_GROUP = "群聊[<u><e>{}</e></u>] "
TEMPLATE_COMMAND = "CMD[<u><c>{}</c></u>] "
2024-02-25 03:18:34 +08:00
TEMPLATE_PLATFORM = "平台[<u><m>{}</m></u>] "
2024-02-04 04:18:54 +08:00
TEMPLATE_TARGET = "[Target]([<u><e>{}</e></u>]) "
SUCCESS_TEMPLATE = "[<u><c>{}</c></u>]: {} | 参数[{}] 返回: [<y>{}</y>]"
WARNING_TEMPLATE = "[<u><y>{}</y></u>]: {}"
ERROR_TEMPLATE = "[<u><r>{}</r></u>]: {}"
@overload
@classmethod
def info(
cls,
info: str,
command: str | None = None,
*,
session: int | str | None = None,
group_id: int | str | None = None,
adapter: str | None = None,
target: Any = None,
2024-02-25 03:18:34 +08:00
platform: str | None = None,
): ...
2024-02-04 04:18:54 +08:00
@overload
@classmethod
def info(
cls,
info: str,
command: str | None = None,
*,
session: Session | None = None,
target: Any = None,
2024-02-25 03:18:34 +08:00
platform: str | None = None,
): ...
2024-02-04 04:18:54 +08:00
@classmethod
def info(
cls,
info: str,
command: str | None = None,
*,
session: int | str | Session | None = None,
group_id: int | str | None = None,
adapter: str | None = None,
target: Any = None,
2024-02-25 03:18:34 +08:00
platform: str | None = None,
2024-02-04 04:18:54 +08:00
):
user_id: str | None = session # type: ignore
group_id = None
if type(session) == Session:
user_id = session.id1
adapter = session.bot_type
2024-02-25 03:18:34 +08:00
if session.id3:
2024-02-04 04:18:54 +08:00
group_id = f"{session.id3}:{session.id2}"
2024-02-25 03:18:34 +08:00
elif session.id2:
group_id = f"{session.id2}"
platform = platform or session.platform
2024-02-04 04:18:54 +08:00
template = cls.__parser_template(
2024-02-25 03:18:34 +08:00
info, command, user_id, group_id, adapter, target, platform
2024-02-04 04:18:54 +08:00
)
try:
logger_.opt(colors=True).info(template)
except Exception as e:
logger_.info(template)
2024-02-04 04:18:54 +08:00
@classmethod
def success(
cls,
info: str,
command: str,
param: Dict[str, Any] | None = None,
result: str = "",
):
param_str = ""
if param:
param_str = ",".join([f"<m>{k}</m>:<g>{v}</g>" for k, v in param.items()])
logger_.opt(colors=True).success(
cls.SUCCESS_TEMPLATE.format(command, info, param_str, result)
)
@overload
@classmethod
def warning(
cls,
info: str,
command: str | None = None,
*,
session: int | str | None = None,
group_id: int | str | None = None,
adapter: str | None = None,
target: Any = None,
2024-02-25 03:18:34 +08:00
platform: str | None = None,
2024-02-04 04:18:54 +08:00
e: Exception | None = None,
2024-02-25 03:18:34 +08:00
): ...
2024-02-04 04:18:54 +08:00
@overload
@classmethod
def warning(
cls,
info: str,
command: str | None = None,
*,
session: Session | None = None,
adapter: str | None = None,
target: Any = None,
2024-02-25 03:18:34 +08:00
platform: str | None = None,
2024-02-04 04:18:54 +08:00
e: Exception | None = None,
2024-02-25 03:18:34 +08:00
): ...
2024-02-04 04:18:54 +08:00
@classmethod
def warning(
cls,
info: str,
command: str | None = None,
*,
session: int | str | Session | None = None,
group_id: int | str | None = None,
adapter: str | None = None,
target: Any = None,
2024-02-25 03:18:34 +08:00
platform: str | None = None,
2024-02-04 04:18:54 +08:00
e: Exception | None = None,
):
user_id: str | None = session # type: ignore
group_id = None
if type(session) == Session:
user_id = session.id1
adapter = session.bot_type
2024-02-25 03:18:34 +08:00
if session.id3:
2024-02-04 04:18:54 +08:00
group_id = f"{session.id3}:{session.id2}"
2024-02-25 03:18:34 +08:00
elif session.id2:
group_id = f"{session.id2}"
platform = platform or session.platform
2024-02-04 04:18:54 +08:00
template = cls.__parser_template(
2024-02-25 03:18:34 +08:00
info, command, user_id, group_id, adapter, target, platform
2024-02-04 04:18:54 +08:00
)
if e:
template += f" || 错误<r>{type(e)}: {e}</r>"
try:
logger_.opt(colors=True).warning(template)
except Exception as e:
logger_.warning(template)
2024-02-04 04:18:54 +08:00
@overload
@classmethod
def error(
cls,
info: str,
command: str | None = None,
*,
session: int | str | None = None,
group_id: int | str | None = None,
adapter: str | None = None,
target: Any = None,
2024-02-25 03:18:34 +08:00
platform: str | None = None,
2024-02-04 04:18:54 +08:00
e: Exception | None = None,
2024-02-25 03:18:34 +08:00
): ...
2024-02-04 04:18:54 +08:00
@overload
@classmethod
def error(
cls,
info: str,
command: str | None = None,
*,
session: Session | None = None,
target: Any = None,
2024-02-25 03:18:34 +08:00
platform: str | None = None,
2024-02-04 04:18:54 +08:00
e: Exception | None = None,
2024-02-25 03:18:34 +08:00
): ...
2024-02-04 04:18:54 +08:00
@classmethod
def error(
cls,
info: str,
command: str | None = None,
*,
session: int | str | Session | None = None,
group_id: int | str | None = None,
adapter: str | None = None,
target: Any = None,
2024-02-25 03:18:34 +08:00
platform: str | None = None,
2024-02-04 04:18:54 +08:00
e: Exception | None = None,
):
user_id: str | None = session # type: ignore
group_id = None
if type(session) == Session:
user_id = session.id1
adapter = session.bot_type
2024-02-25 03:18:34 +08:00
if session.id3:
2024-02-04 04:18:54 +08:00
group_id = f"{session.id3}:{session.id2}"
2024-02-25 03:18:34 +08:00
elif session.id2:
group_id = f"{session.id2}"
platform = platform or session.platform
2024-02-04 04:18:54 +08:00
template = cls.__parser_template(
2024-02-25 03:18:34 +08:00
info, command, user_id, group_id, adapter, target, platform
2024-02-04 04:18:54 +08:00
)
if e:
template += f" || 错误 <r>{type(e)}: {e}</r>"
try:
logger_.opt(colors=True).error(template)
except Exception as e:
logger_.error(template)
2024-02-04 04:18:54 +08:00
@overload
@classmethod
def debug(
cls,
info: str,
command: str | None = None,
*,
session: int | str | None = None,
group_id: int | str | None = None,
adapter: str | None = None,
target: Any = None,
2024-02-25 03:18:34 +08:00
platform: str | None = None,
2024-02-04 04:18:54 +08:00
e: Exception | None = None,
2024-02-25 03:18:34 +08:00
): ...
2024-02-04 04:18:54 +08:00
@overload
@classmethod
def debug(
cls,
info: str,
command: str | None = None,
*,
session: Session | None = None,
target: Any = None,
2024-02-25 03:18:34 +08:00
platform: str | None = None,
2024-02-04 04:18:54 +08:00
e: Exception | None = None,
2024-02-25 03:18:34 +08:00
): ...
2024-02-04 04:18:54 +08:00
@classmethod
def debug(
cls,
info: str,
command: str | None = None,
*,
session: int | str | Session | None = None,
group_id: int | str | None = None,
adapter: str | None = None,
target: Any = None,
2024-02-25 03:18:34 +08:00
platform: str | None = None,
2024-02-04 04:18:54 +08:00
e: Exception | None = None,
):
user_id: str | None = session # type: ignore
group_id = None
if type(session) == Session:
user_id = session.id1
adapter = session.bot_type
2024-02-25 03:18:34 +08:00
if session.id3:
2024-02-04 04:18:54 +08:00
group_id = f"{session.id3}:{session.id2}"
2024-02-25 03:18:34 +08:00
elif session.id2:
group_id = f"{session.id2}"
platform = platform or session.platform
2024-02-04 04:18:54 +08:00
template = cls.__parser_template(
2024-02-25 03:18:34 +08:00
info, command, user_id, group_id, adapter, target, platform
2024-02-04 04:18:54 +08:00
)
if e:
template += f" || 错误 <r>{type(e)}: {e}</r>"
try:
logger_.opt(colors=True).debug(template)
except Exception as e:
logger_.debug(template)
2024-02-04 04:18:54 +08:00
@classmethod
def __parser_template(
cls,
info: str,
command: str | None = None,
user_id: int | str | None = None,
group_id: int | str | None = None,
adapter: str | None = None,
target: Any = None,
2024-02-25 03:18:34 +08:00
platform: str | None = None,
2024-02-04 04:18:54 +08:00
) -> str:
arg_list = []
template = ""
if adapter is not None:
template += cls.TEMPLATE_ADAPTER
arg_list.append(adapter)
2024-02-25 03:18:34 +08:00
if platform is not None:
template += cls.TEMPLATE_PLATFORM
arg_list.append(platform)
2024-02-04 04:18:54 +08:00
if group_id is not None:
template += cls.TEMPLATE_GROUP
arg_list.append(group_id)
if user_id is not None:
template += cls.TEMPLATE_USER
arg_list.append(user_id)
if command is not None:
template += cls.TEMPLATE_COMMAND
arg_list.append(command)
if target is not None:
template += cls.TEMPLATE_TARGET
arg_list.append(target)
arg_list.append(info)
template += "{}"
return template.format(*arg_list)