🎨 优化日志显示

This commit is contained in:
Wuyi无疑 2023-04-06 21:09:03 +08:00
parent 95e0b65856
commit 9cf7c4b997
6 changed files with 75 additions and 28 deletions

1
.gitignore vendored
View File

@ -668,3 +668,4 @@ GsData.db
GenshinUID
data
plugins
logs

View File

@ -56,12 +56,8 @@ class _Bot:
async def _process(self):
while True:
data = await self.queue.get()
task = asyncio.create_task(data)
self.bg_tasks.add(task)
try:
task.add_done_callback(lambda _: self.bg_tasks.discard(task))
except Exception as e:
logger.error(e)
asyncio.create_task(data)
self.queue.task_done()
class Bot:

View File

@ -34,17 +34,22 @@ class GsClient:
async def send_msg(self):
while True:
intent = await self._input()
if intent == '全匹配测试':
user_id = '55551111'
if intent == '图片测试':
content = [
Message(
type='file',
data='xxx.json|XAclpWfLF5d66dtrHx8cqq8E+',
)
]
else:
user_id = '51'
content = [Message(type='text', data=intent)]
msg = MessageReceive(
bot_id='Nonebot',
user_type='direct',
user_pm=2,
group_id=None,
user_id=user_id,
content=[Message(type='text', data=intent)],
user_id='51',
content=content,
)
msg_send = msgjson.encode(msg)
await self.ws.send(msg_send)

View File

@ -1,9 +1,16 @@
from pathlib import Path
from typing import Optional
gs_data_path = Path(__file__).parents[1] / 'data'
def get_res_path() -> Path:
if not gs_data_path.exists():
gs_data_path.mkdir()
return gs_data_path
def get_res_path(_path: Optional[str] = None) -> Path:
if _path:
path = gs_data_path / _path
else:
path = gs_data_path
if not path.exists():
path.mkdir()
return path

View File

@ -65,7 +65,7 @@ async def handle_event(ws: _Bot, msg: MessageReceive):
# 获取用户权限,越小越高
user_pm = await get_user_pml(msg)
event = await msg_process(msg)
logger.info(f'[收到事件] {event}')
logger.info('[收到事件]', event=event)
valid_event: Dict[Trigger, int] = {}
pending = [
_check_command(

View File

@ -6,13 +6,15 @@ from typing import TYPE_CHECKING
import loguru
from gsuid_core.config import core_config
from gsuid_core.models import Event, Message
from gsuid_core.data_store import get_res_path
if TYPE_CHECKING:
# avoid sphinx autodoc resolve annotation failed
# because loguru module do not have `Logger` class actually
from loguru import Logger
logger: "Logger" = loguru.logger
logger: 'Logger' = loguru.logger
# https://loguru.readthedocs.io/en/stable/overview.html#entirely-compatible-with-standard-logging
@ -33,23 +35,59 @@ class LoguruHandler(logging.Handler): # pragma: no cover
)
FORMAT = (
"<g>{time:MM-DD HH:mm:ss}</g> "
"[<lvl>{level}</lvl>] "
"<c><u>{name}</u></c> | "
# "<c>{function}:{line}</c>| "
"{message}"
)
def format_event(record):
if 'event' in record['extra']:
event: Event = record['extra']['event']
if event.file and event.file_type != 'url':
file = f'{event.file[:20]}...(base64)'
content = [Message('file', f'{event.file_name}|{file}')]
else:
file = event.file
content = event.content
message = (
f'<m><b>[Event]</b></m> '
f'raw_text={event.raw_text}, '
f'command={event.command}, '
f'text={event.text}, '
f'image={event.image}, '
f'at={event.at}, '
f'image_list={event.image}, '
f'at_list={event.at_list}, '
f'is_tome={event.is_tome}, '
f'reply={event.reply}, '
f'file_name={event.file_name}, '
f'file_type={event.file_type}, '
f'file={file}'
f' | <m><b>[Receive]</b></m> '
f'bot_id={event.bot_id}, '
f'bot_self_id={event.bot_self_id}, '
f'msg_id={event.msg_id}, '
f'user_type={event.user_type}, '
f'group_id={event.group_id}, '
f'user_id={event.user_id}, '
f'user_pm={event.user_pm}, '
f'content={content}, '
)
else:
message = '{message}'
LEVEL: str = core_config.get_config("log").get("level", "INFO")
time = '<g>{time:MM-DD HH:mm:ss}</g>'
level = '[<lvl>{level}</lvl>]'
def_name = '<c><u>{name}</u></c>'
return f'{time} {level} {def_name} | {message} \n'
LEVEL: str = core_config.get_config('log').get('level', 'INFO')
logger.remove()
logger_id = logger.add(sys.stdout, level=LEVEL, diagnose=False, format=FORMAT)
logger_id = logger.add(
sys.stdout, level=LEVEL, diagnose=False, format=format_event
)
logger.add(
"logs/{time:YYYY-MM-DD}.log",
sink=get_res_path() / 'logs/{time:YYYY-MM-DD}.log',
format=format_event,
rotation=datetime.time(),
level=LEVEL,
diagnose=False,
format=FORMAT,
)