EasySave Log Server
Service de centralisation des logs qui reçoit les entrées de log de sauvegarde envoyées par les clients EasySave via une socket TCP et les enregistre dans des fichiers JSON journaliers (même format que les logs locaux EasySave).
Protocole
- Transport : TCP.
- Format : un objet JSON par ligne (newline-delimited JSON). Chaque ligne est une entrée de log avec la même structure que LogEntry EasySave
- Réponse : pour chaque ligne reçue, le serveur envoie une ligne : OK ou ERR
Structure JSON d’une entrée de log
{
"timeStamp": "2026-02-23T12:00:00Z",
"backupName": "MyBackup",
"sourcePath": "C:\\Source\\file.txt",
"destinationPath": "D:\\Backup\\file.txt",
"fileSizeBytes": 1024,
"transferTimeMs": 150,
"encryptionTimeMs": 0,
"reason": null
}
- transferTimeMs : durée totale en millisecondes (nombre).
- reason : correspond à un arrêt par exemple lorsqu'un logiciel métier est lancé.
Côté client EasySave
Dans l’application EasySave (GUI ou config), la destination des logs peut être réglée sur :
- Local uniquement : les logs restent dans les fichiers journaliers sur la machine (comportement par défaut).
- Serveur centralisé uniquement : les entrées sont envoyées uniquement vers ce service (aucun fichier log local).
- Local et centralisé : écriture locale et envoi au serveur.
L’adresse du serveur (ex. localhost:9050 ou serveur.domaine:9050) se configure dans les paramètres (GUI → Paramètres, ou champ centralizedLogServerAddress dans backup-config.json).
Configuration (variables d’environnement)
| Variable | Description | Défaut |
| LOG_SERVER_PORT | Port TCP d’écoute du serveur | 9050 |
| LOG_DIR | Répertoire des fichiers de log journaliers (UTC) | /logs |
Compilation et exécution (en local)
Depuis la racine du dépôt :
dotnet build src/EasySave.LogServer/EasySave.LogServer.csproj -c Release
dotnet run --project src/EasySave.LogServer/EasySave.LogServer.csproj -c Release
Ou en définissant les options via les variables d’environnement :
$env:LOG_SERVER_PORT=9050; $env:LOG_DIR="./logs"; dotnet run --project src/EasySave.LogServer/EasySave.LogServer.csproj
Docker
Build et exécution avec Docker
Depuis la racine du dépôt :
docker build -f src/EasySave.LogServer/Dockerfile -t easysave-logserver .
docker run -p 9050:9050 -v easysave-logs:/logs easysave-logserver
Build et exécution avec Docker Compose
Depuis la racine du dépôt :
Cela construit l’image, démarre le service et monte un volume pour la persistance des logs. Le port de la socket est exposé sur 9050 (ou la valeur de LOG_SERVER_PORT sur l’hôte).
Pour utiliser un autre port sur l’hôte :
LOG_SERVER_PORT=9090 docker-compose up -d
Persistance
Les logs sont stockés dans un volume Docker nommé logdata (voir docker-compose.yml). Pour l’inspecter :
docker volume inspect easysave_logdata
Pour lister le contenu du répertoire de logs dans un conteneur éphémère :
docker run --rm -v easysave_logdata:/logs alpine ls -la /logs
Architecture (SOLID / GoF)
- ILogEntryHandler : contrat pour traiter une entrée de log (validation + persistance). Implémenté par LogEntryHandler (adaptation DTO → LogEntry + ILogWriter).
- LogSocketListener : accepte les connexions TCP et traite le JSON une ligne à la fois ; délègue chaque ligne à ILogEntryHandler. Une tâche par client (connexions concurrentes).
- DailyLogWriter (EasyLog) : fichiers JSON journaliers thread-safe ; un fichier par date UTC (yyyy-MM-dd.json), même format que les logs locaux EasySave.