Python 后端(FastAPI + FastMCP + ...)的初始版本号设定为 0.1.0,这是 uv 在 pypriject.toml 里给我自动设置的,我觉得有道理。
43 lines
886 B
Python
43 lines
886 B
Python
import sys
|
|
from collections import deque
|
|
|
|
from loguru import logger
|
|
|
|
logger.remove()
|
|
logger.add(
|
|
sys.stdout,
|
|
level="DEBUG",
|
|
colorize=True,
|
|
)
|
|
logger.add("data/app.log", rotation="10 MB", retention="7 days") # 文件日志
|
|
|
|
log_buffer = deque(maxlen=1000)
|
|
|
|
|
|
class LogRecord:
|
|
log_counter = 0
|
|
|
|
def __init__(self, message: str) -> None:
|
|
self.id = LogRecord.log_counter
|
|
self.message = message
|
|
|
|
LogRecord.log_counter += 1
|
|
|
|
|
|
def log_record_serialize(record: LogRecord) -> dict:
|
|
return {
|
|
"id": record.id,
|
|
"message": record.message,
|
|
}
|
|
|
|
|
|
def memory_sink(message: str) -> None:
|
|
"""向自定义缓冲区写入日志,供 WebUI 获取
|
|
:param message: 'loguru._handler.Message'
|
|
"""
|
|
log_entry = LogRecord(message=message)
|
|
log_buffer.append(log_entry)
|
|
|
|
|
|
logger.add(sink=memory_sink, level="DEBUG", colorize=True)
|