PhoneWork/main.py
Yuyao Huang (Sam) c3741ea006 refactor(logging): 优化日志格式和内容以提高可读性
- 调整日志格式,增加模块名显示
- 将部分debug日志升级为info级别以增加可见性
- 简化日志消息,缩短显示长度
- 统一日志前缀格式
- 优化工具调用日志显示
2026-03-28 08:09:10 +08:00

71 lines
1.7 KiB
Python

"""PhoneWork entry point: FastAPI app + Feishu long-connection client."""
from __future__ import annotations
import asyncio
import logging
import uvicorn
from fastapi import FastAPI
from rich.logging import RichHandler
from agent.manager import manager
from bot.handler import start_websocket_client
logging.basicConfig(
level=logging.DEBUG,
format="%(name)-20s %(message)s",
datefmt="[%X]",
handlers=[RichHandler(
rich_tracebacks=True,
markup=True,
show_path=False,
omit_repeated_times=False,
)],
)
# Suppress noisy third-party debug output
for _noisy in ("httpcore", "httpx", "openai._base_client", "urllib3", "lark_oapi", "websockets"):
logging.getLogger(_noisy).setLevel(logging.WARNING)
logger = logging.getLogger(__name__)
app = FastAPI(title="PhoneWork", version="0.1.0")
@app.get("/health")
async def health() -> dict:
sessions = manager.list_sessions()
return {"status": "ok", "active_sessions": len(sessions)}
@app.get("/sessions")
async def list_sessions() -> list:
return manager.list_sessions()
@app.on_event("startup")
async def startup_event() -> None:
# Start the session manager's idle-reaper
await manager.start()
# Start the Feishu WebSocket client in a background thread,
# passing the running event loop so async work can be scheduled
loop = asyncio.get_event_loop()
start_websocket_client(loop)
logger.info("PhoneWork started")
@app.on_event("shutdown")
async def shutdown_event() -> None:
await manager.stop()
logger.info("PhoneWork shut down")
if __name__ == "__main__":
uvicorn.run(
"main:app",
host="0.0.0.0",
port=8000,
reload=False,
log_level="info",
)