# ✅ Configuration Finale - Système de Logs Veza

## 📁 Structure Complète des Fichiers de Logs

Tous les logs sont enregistrés dans `/var/log/veza/` avec le format suivant :
- **Fichier principal** : `module.log` (tous les logs : DEBUG, INFO, WARN, ERROR)
- **Fichier d'erreurs** : `module-error.log` (uniquement ERROR)

### Liste Complète des Fichiers

```
/var/log/veza/
├── backend-api.log          ✅ Backend Go - Tous les logs
├── backend-api-error.log    ✅ Backend Go - Erreurs uniquement
├── frontend.log              ✅ Frontend React - Tous les logs (via endpoint)
├── frontend-error.log        ✅ Frontend React - Erreurs uniquement
├── chat.log                  ✅ Chat Server (Rust) - Tous les logs
├── chat-error.log            ✅ Chat Server (Rust) - Erreurs uniquement
├── stream.log                ✅ Stream Server (Rust) - Tous les logs
├── stream-error.log          ✅ Stream Server (Rust) - Erreurs uniquement
├── db.log                    ✅ Database - Tous les logs
├── db-error.log              ✅ Database - Erreurs uniquement
├── redis.log                 ✅ Redis - Tous les logs
├── redis-error.log           ✅ Redis - Erreurs uniquement
├── rabbitmq.log              ✅ RabbitMQ - Tous les logs
└── rabbitmq-error.log        ✅ RabbitMQ - Erreurs uniquement
```

**Note :** Les fichiers `-error.log` sont créés automatiquement uniquement lorsqu'une erreur est loggée.

## 🔧 Configuration 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 logs frontend
- `internal/api/router.go` - Route `/api/v1/logs/frontend`

**Loggers configurés :**
```go
// Backend API
logging.NewLoggerWithFileRotation(config.LogDir, "backend-api", env, logLevel)
// → backend-api.log / backend-api-error.log

// Database
logging.NewLoggerWithFileRotation(config.LogDir, "db", env, logLevel)
// → db.log / db-error.log

// Redis
logging.NewLoggerWithFileRotation(config.LogDir, "redis", env, logLevel)
// → redis.log / redis-error.log

// RabbitMQ
logging.NewLoggerWithFileRotation(config.LogDir, "rabbitmq", env, logLevel)
// → rabbitmq.log / rabbitmq-error.log

// Frontend (via endpoint)
logging.NewLoggerWithFileRotation(logDir, "frontend", cfg.Env, cfg.LogLevel)
// → frontend.log / frontend-error.log
```

### Chat Server (`veza-chat-server`)

**Fichier modifié :**
- `src/main.rs` - Configuration avec `LOG_DIR`

**Configuration :**
```rust
let log_dir = std::env::var("LOG_DIR").unwrap_or_else(|_| "/var/log/veza".to_string());
let log_file = format!("{}/chat.log", log_dir);
// → chat.log / chat-error.log (géré par veza-common)
```

### Stream Server (`veza-stream-server`)

**Fichier modifié :**
- `src/main.rs` - Configuration avec `LOG_DIR`

**Configuration :**
```rust
let log_dir = std::env::var("LOG_DIR").unwrap_or_else(|_| "/var/log/veza".to_string());
let log_file = format!("{}/stream.log", log_dir);
// → stream.log / stream-error.log (géré par veza-common)
```

### Frontend (`apps/web`)

**Fichier modifié :**
- `src/utils/logger.ts` - Envoi automatique vers endpoint backend

**Configuration :**
```typescript
// Envoi automatique vers /api/v1/logs/frontend
const logEndpoint = import.meta.env.VITE_LOG_ENDPOINT || 
  (import.meta.env.VITE_API_URL ? `${import.meta.env.VITE_API_URL}/api/v1/logs/frontend` : null);
```

### Common Library (`veza-common`)

**Fichiers modifiés :**
- `src/logging.rs` - Support fichiers d'erreurs séparés avec `LevelFilter::ERROR`
- `Cargo.toml` - Dépendances mises à jour

**Fonctionnalité :**
- Crée automatiquement `module.log` et `module-error.log`
- Filtre les erreurs avec `LevelFilter::ERROR`

## ⚙️ Configuration

### Variables d'environnement

```bash
# Répertoire des logs (optionnel, défaut: /var/log/veza)
export LOG_DIR=/var/log/veza

# Niveau de log (optionnel, défaut: INFO)
export LOG_LEVEL=DEBUG

# Pour le frontend (optionnel)
export VITE_API_URL=http://localhost:8080
export VITE_LOG_ENDPOINT=http://localhost:8080/api/v1/logs/frontend
```

### Fallback en développement

En développement, si `/var/log/veza` n'est pas accessible en écriture, le système utilise automatiquement `./logs` (dans le répertoire du projet).

## 📊 Caractéristiques

### Rotation automatique
- **Taille max** : 100 MB par fichier
- **Backups** : 10 fichiers maximum
- **Rétention** : 30 jours
- **Compression** : Activée (gzip)

### Format des logs
- **Production/Staging** : JSON structuré
- **Développement** : Console lisible + JSON dans fichiers

### Séparation des erreurs
- Fichier principal : Tous les logs (DEBUG, INFO, WARN, ERROR)
- Fichier d'erreurs : Uniquement ERROR (créé automatiquement)

## 🧪 Vérification

### Script de vérification

```bash
./verify_logs_setup.sh
```

### Vérification manuelle

```bash
# Vérifier que tous les fichiers sont créés
ls -lh /var/log/veza/*.log

# Voir les logs en temps réel
tail -f /var/log/veza/backend-api.log

# Voir uniquement les erreurs
tail -f /var/log/veza/*-error.log

# Parser JSON
cat /var/log/veza/backend-api.log | jq 'select(.L == "ERROR")'
```

## ✅ Checklist Finale

- [x] Backend API : `backend-api.log` / `backend-api-error.log`
- [x] Frontend : `frontend.log` / `frontend-error.log` (via endpoint)
- [x] Chat Server : `chat.log` / `chat-error.log`
- [x] Stream Server : `stream.log` / `stream-error.log`
- [x] Database : `db.log` / `db-error.log`
- [x] Redis : `redis.log` / `redis-error.log`
- [x] RabbitMQ : `rabbitmq.log` / `rabbitmq-error.log`
- [x] Rotation automatique configurée
- [x] Format JSON en production
- [x] Fallback en développement
- [x] Endpoint frontend configuré
- [x] Documentation complète

## 🎯 Résultat

**Tous les modules sont configurés pour enregistrer leurs logs dans `/var/log/veza/` avec des fichiers séparés par module et par niveau d'erreur.**

Les fichiers sont créés automatiquement au démarrage des services et lors de la première écriture de log.
