veza/LOGGING_FILES_SETUP.md

243 lines
6 KiB
Markdown

# 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)