feat(api): initialize FastAPI with uvicorn logging and CORS middleware#31
feat(api): initialize FastAPI with uvicorn logging and CORS middleware#31Kaiohz wants to merge 2 commits into
Conversation
Configure uvicorn access log integration, add CORS middleware setup, and implement health check endpoint with proper logging configuration. Set default log level to INFO and prepare alembic migration runner utility.
Kaiohz
left a comment
There was a problem hiding this comment.
🔍 Code Review
📊 Score: 6/10
La simplification est louable, mais l'implémentation a des problèmes potentiels.
✅ Points positifs
- Simplification du code (moins verbeux)
force=Truepermet de reconfigurer le logging proprementstdoutest plus standard pour les containers (Docker/K8s)- Le format reste cohérent et lisible
⚠️ Problèmes identifiés
1. Perte du contrôle sur les loggers uvicorn
La config précédente configurait explicitement :
"loggers": {
"uvicorn": {...},
"uvicorn.error": {...},
"uvicorn.access": {...},
}Avec basicConfig, ces loggers n'ont plus de config spécifique. Uvicorn risque d'utiliser son propre handler par défaut, ce qui peut causer :
- Format de log différent pour les logs uvicorn
- Perte de contrôle sur le niveau de log des access logs
2. log_config=None peut causer des doublons
En passant None à uvicorn, il utilise sa config par défaut. Comme tu as déjà appelé basicConfig() avant, il y a un risque de double logging :
- Tes logs via
basicConfig - Les logs uvicorn via sa config interne
3. Import asyncio non utilisé
import asyncio # <-- ajouté mais jamais utilisé4. Suppression du module docstring
Le docstring """Main entry point for the RAGAnything API.""" a été retiré. Ce n'est pas bloquant, mais ça réduit la clarté du module.
💡 Suggestions d'amélioration
Option A: Utiliser la config native uvicorn
# Pas de basicConfig(), laisser uvicorn gérer
uvicorn.run(
app,
host=app_config.HOST,
port=app_config.PORT,
log_level=app_config.UVICORN_LOG_LEVEL,
access_log=True,
)Option B: Garder une config structurée (recommandé)
LOGGING_CONFIG = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"default": {
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
},
},
"handlers": {
"stdout": {
"class": "logging.StreamHandler",
"formatter": "default",
"stream": "ext://sys.stdout",
},
},
"root": {"level": "INFO", "handlers": ["stdout"]},
}
logging.config.dictConfig(LOGGING_CONFIG)Et passer cette config à uvicorn :
uvicorn.run(..., log_config=LOGGING_CONFIG)❓ Questions
- Quelle était la motivation principale de cette simplification ?
- As-tu testé que les logs uvicorn (access logs en particulier) sortent correctement ?
- Y'a-t-il une raison pour retirer le module docstring ?
En l'état, je recommanderais de revoir la gestion du logging pour éviter les problèmes de double logging et perte de contrôle sur les logs uvicorn.
Configure uvicorn access log integration, add CORS middleware setup, and implement health check endpoint with proper logging configuration. Set default log level to INFO and prepare alembic migration runner utility.