- Archiver 131 .md dans docs/archive/root-md/ - Archiver 22 .json dans docs/archive/root-json/ - Conserver 7 .md utiles (README, CONTRIBUTING, CHANGELOG, etc.) - Conserver package.json, package-lock.json, turbo.json - Ajouter README d'index dans chaque archive
6 KiB
6 KiB
Configuration des Fichiers de Logs Veza
📁 Structure des Fichiers de Logs
Tous les logs sont enregistrés dans /var/log/veza/ avec des fichiers séparés par module et par niveau d'erreur.
Fichiers de Logs
/var/log/veza/
├── backend-api.log # Tous les logs du backend Go
├── backend-api-error.log # Erreurs uniquement (ERROR)
├── db.log # Logs de la base de données
├── db-error.log # Erreurs DB uniquement
├── redis.log # Logs Redis
├── redis-error.log # Erreurs Redis uniquement
├── rabbitmq.log # Logs RabbitMQ
├── rabbitmq-error.log # Erreurs RabbitMQ uniquement
├── chat.log # Tous les logs du chat server (Rust)
├── chat-error.log # Erreurs chat uniquement
├── stream.log # Tous les logs du stream server (Rust)
├── stream-error.log # Erreurs stream uniquement
├── frontend.log # Tous les logs du frontend React
└── frontend-error.log # Erreurs frontend uniquement
⚙️ Configuration
Variable d'environnement
export LOG_DIR=/var/log/veza # Par défaut si non défini
Rotation automatique
- Taille max : 100 MB par fichier
- Backups : 10 fichiers maximum
- Rétention : 30 jours
- Compression : Activée (gzip)
🔧 Implémentation par Module
Backend Go (veza-backend-api)
Fichiers modifiés :
internal/logging/logger.go- FonctionNewLoggerWithFileRotation()internal/config/config.go- Configuration des loggers par moduleinternal/handlers/frontend_log_handler.go- Endpoint pour recevoir les logs frontendinternal/api/router.go- Route/api/v1/logs/frontend
Loggers créés :
backend-api→backend-api.log/backend-api-error.logdb→db.log/db-error.logredis→redis.log/redis-error.lograbbitmq→rabbitmq.log/rabbitmq-error.logfrontend→frontend.log/frontend-error.log(via endpoint)
Services Rust
Chat Server (veza-chat-server)
src/main.rs- Configuration avecLOG_DIRet fichiers séparés- Logs →
chat.log/chat-error.log
Stream Server (veza-stream-server)
src/main.rs- Configuration avecLOG_DIRet fichiers séparés- Logs →
stream.log/stream-error.log
Common Library (veza-common)
src/logging.rs- Support fichiers d'erreurs séparés avecLevelFilter::ERRORCargo.toml- Dépendances mises à jour
Frontend (apps/web)
Fichiers modifiés :
src/utils/logger.ts- Envoi automatique vers/api/v1/logs/frontend
Configuration :
- Variable d'environnement :
VITE_LOG_ENDPOINT(optionnel) - Par défaut :
${VITE_API_URL}/api/v1/logs/frontend
📊 Format des Logs
Production/Staging
- Format : JSON structuré
- Exemple :
{
"level": "error",
"ts": "2025-01-27T14:30:00Z",
"caller": "handler.go:123",
"msg": "Failed to process request",
"request_id": "abc-123-def",
"error": "connection timeout"
}
Développement
- Format : Console lisible + JSON dans fichiers
- Exemple :
2025-01-27T14:30:00Z INFO handler.go:123 Request completed {"request_id": "abc-123-def", "latency": "45ms"}
🐛 Utilisation pour le Debugging
Voir les logs en temps réel
# Tous les logs d'un module
tail -f /var/log/veza/backend-api.log
# Erreurs uniquement
tail -f /var/log/veza/backend-api-error.log
# Plusieurs fichiers en parallèle
tail -f /var/log/veza/*.log
Filtrer par request_id
# Tous les logs d'une requête
grep "abc-123-def" /var/log/veza/backend-api.log
# Erreurs d'une requête
grep "abc-123-def" /var/log/veza/backend-api-error.log
Parser JSON
# Toutes les erreurs
cat /var/log/veza/backend-api.log | jq 'select(.level == "error")'
# Par request_id
cat /var/log/veza/backend-api.log | jq 'select(.request_id == "abc-123-def")'
# Requêtes lentes
cat /var/log/veza/backend-api.log | jq 'select(.is_slow == true)'
Recherche dans tous les fichiers
# Chercher une erreur dans tous les modules
grep -r "connection timeout" /var/log/veza/*.log
# Compter les erreurs
grep -c "ERROR" /var/log/veza/*-error.log
Statistiques
# Taille des fichiers
du -h /var/log/veza/
# Nombre de lignes par fichier
wc -l /var/log/veza/*.log
# Dernières erreurs (tous modules)
tail -n 50 /var/log/veza/*-error.log
🔍 Endpoint Frontend
Route
POST /api/v1/logs/frontend
Format de la requête
{
"timestamp": "2025-01-27T14:30:00Z",
"level": "ERROR",
"message": "Failed to load user data",
"context": {
"request_id": "abc-123-def",
"user_id": "user-456",
"component": "UserProfile"
},
"data": {
"error": "Network timeout"
}
}
Réponse
{
"success": true,
"data": {
"received": true,
"level": "ERROR"
}
}
✅ Vérification
Vérifier que les fichiers sont créés
# Créer le répertoire si nécessaire
sudo mkdir -p /var/log/veza
sudo chown -R $USER:$USER /var/log/veza
# Vérifier les permissions
ls -la /var/log/veza/
Tester l'endpoint frontend
curl -X POST http://localhost:8080/api/v1/logs/frontend \
-H "Content-Type: application/json" \
-d '{
"level": "ERROR",
"message": "Test log",
"context": {"request_id": "test-123"}
}'
Vérifier les logs
# Vérifier que le log a été écrit
tail -n 1 /var/log/veza/frontend.log
tail -n 1 /var/log/veza/frontend-error.log
📝 Notes
- Les fichiers sont créés automatiquement au démarrage des services
- La rotation est gérée automatiquement par
lumberjack(Go) ettracing-appender(Rust) - Les logs sont asynchrones pour ne pas bloquer les goroutines/threads
- Le filtre de secrets est appliqué automatiquement sur tous les logs Go
- Les logs frontend sont envoyés de manière non-bloquante (sendBeacon/fetch avec keepalive)