# 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 ```bash 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` - Fonction `NewLoggerWithFileRotation()` - `internal/config/config.go` - Configuration des loggers par module - `internal/handlers/frontend_log_handler.go` - Endpoint pour recevoir les logs frontend - `internal/api/router.go` - Route `/api/v1/logs/frontend` **Loggers créés :** - `backend-api` → `backend-api.log` / `backend-api-error.log` - `db` → `db.log` / `db-error.log` - `redis` → `redis.log` / `redis-error.log` - `rabbitmq` → `rabbitmq.log` / `rabbitmq-error.log` - `frontend` → `frontend.log` / `frontend-error.log` (via endpoint) ### Services Rust **Chat Server (`veza-chat-server`)** - `src/main.rs` - Configuration avec `LOG_DIR` et fichiers sĂ©parĂ©s - Logs → `chat.log` / `chat-error.log` **Stream Server (`veza-stream-server`)** - `src/main.rs` - Configuration avec `LOG_DIR` et fichiers sĂ©parĂ©s - Logs → `stream.log` / `stream-error.log` **Common Library (`veza-common`)** - `src/logging.rs` - Support fichiers d'erreurs sĂ©parĂ©s avec `LevelFilter::ERROR` - `Cargo.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** : ```json { "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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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 ```json { "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 ```json { "success": true, "data": { "received": true, "level": "ERROR" } } ``` ## ✅ VĂ©rification ### VĂ©rifier que les fichiers sont créés ```bash # 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 ```bash 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 ```bash # 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) et `tracing-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)