"""
主程序入口
"""
import sys
import asyncio
from loguru import logger
import uvicorn
from configs.settings import settings
from app_server import get_app_server
def setup_logging():
"""配置日志"""
logger.remove() # 移除默认处理器
# 添加控制台输出
logger.add(
sys.stderr,
format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>",
level=settings.log_level,
colorize=True,
)
# 添加文件输出
logger.add(
"logs/xiaohongshu_{time:YYYY-MM-DD}.log",
rotation="00:00", # 每天午夜轮转
retention="7 days", # 保留 7 天
level=settings.log_level,
encoding="utf-8",
)
async def main():
"""主函数"""
# 配置日志
setup_logging()
logger.info("=" * 60)
logger.info("Xiaohongshu MCP Python Server")
logger.info("=" * 60)
logger.info(f"Host: {settings.host}")
logger.info(f"Port: {settings.port}")
logger.info(f"Headless: {settings.headless}")
logger.info(f"Log Level: {settings.log_level}")
logger.info("=" * 60)
try:
# 初始化应用服务器
app_server = await get_app_server()
app = app_server.get_app()
# 启动 HTTP 服务器
config = uvicorn.Config(
app,
host=settings.host,
port=settings.port,
log_level=settings.log_level.lower(),
)
server = uvicorn.Server(config)
logger.info("Starting HTTP server...")
await server.serve()
except KeyboardInterrupt:
logger.info("Received keyboard interrupt, shutting down...")
except Exception as e:
logger.error(f"Application error: {e}", exc_info=True)
sys.exit(1)
if __name__ == "__main__":
asyncio.run(main())