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

