244 lines
6 KiB
Markdown
244 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)
|
||
|
|
|