Derniere mise a jour : 9 fevrier 2026

Systeme de Logs

2024 Java Library

Presentation

Objectif principal : Une library de logging pour Java, style Log4j ou SLF4J mais en simplifie. Niveaux de log, formatage configurable, multiple outputs (console, fichier, reseau).

Technologies utilisees : Java pur. Pattern Singleton pour le logger global. Pattern Strategy pour les formateurs. Pattern Observer pour les handlers. Fichier de config en properties.

Fonctionnalites cles : 5 niveaux (TRACE, DEBUG, INFO, WARN, ERROR), format personnalisable avec placeholders, rotation des fichiers de log, envoi asynchrone pour pas bloquer l'app.

Livrables attendus : Un JAR a inclure dans n'importe quel projet Java. Documentation Javadoc. Exemples d'utilisation.

Calendrier previsionnel : Deux semaines. La partie asynchrone avec les threads c'etait le plus complexe.

Parties prenantes & criteres de succes : Projet perso pour comprendre comment marchent les loggers qu'on utilise tous les jours. Et pratiquer les design patterns.

Le Defi

Le logging doit etre non-bloquant. Si j'ecris sur disque de maniere synchrone, ca ralentit l'application. Mais l'asynchrone introduit des problemes de concurrence et de perte de logs si l'app crash.

La Solution

Une BlockingQueue entre le thread appelant et le thread d'ecriture. Les logs sont mis dans la queue (tres rapide) et un thread dedie les ecrit. Shutdown hook pour vider la queue avant que l'app se termine. Buffer en memoire avec flush periodique.

Architecture Technique

Classe Logger (Singleton) avec methodes debug(), info(), etc. Interface LogHandler avec implementations ConsoleHandler, FileHandler, SocketHandler. Interface LogFormatter avec SimpleFormatter, JsonFormatter. Classe LogRecord qui encapsule un log. AsyncWrapper qui wrappe n'importe quel handler pour le rendre asynchrone.

Points Cles

  • Logging asynchrone
  • Multiple outputs configurables
  • Rotation automatique des fichiers

Apercu

Resultats & Apprentissages

La library fonctionne et je l'utilise dans mes autres projets Java. J'ai vraiment compris les design patterns en les appliquant a un vrai probleme. La programmation concurrente en Java c'est subtil mais puissant.

Evolutions Futures

Configuration via annotations. MDC (Mapped Diagnostic Context) pour le contexte. Compression des vieux logs. Interface web pour visualiser les logs en temps reel.

Retour aux projets Me contacter