veza/LOGGING_FILES_SETUP.md

6 KiB

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

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-apibackend-api.log / backend-api-error.log
  • dbdb.log / db-error.log
  • redisredis.log / redis-error.log
  • rabbitmqrabbitmq.log / rabbitmq-error.log
  • frontendfrontend.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 :
{
  "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

# 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

# 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

# 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

# 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

# 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

{
  "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

{
  "success": true,
  "data": {
    "received": true,
    "level": "ERROR"
  }
}

Vérification

Vérifier que les fichiers sont créés

# 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

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

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