IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Logging Java Discussion :

Log d'une application multithread


Sujet :

Logging Java

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 142
    Points : 80
    Points
    80
    Par défaut Log d'une application multithread
    Bonjour,

    J'ai développé un système de logs centralisés pour une application. Ces logs utilisent un JDBCAppender (que j'ai légèrement modifié) de l'API log4j afin de les insérer dans une base de données.

    L'insertion étant assez couteuse, j'ai redéfini la méthode execute() du JDBCAppender afin qu'elle lance un thread et puis appelle la vraie méthode execute().

    En fait, je souhaite que mon traitement principal se fasse le plus rapidement possible quitte à repousser l'insertion des logs vers la fin du traitement principal. Seulement ne connaissant pas à l'avance la durée de mon traitement principal, je ne suis pas assuré que l'insertion aura lieu à la fin.

    Pire, il se peut que le thread principal et le thread d'insertion des logs alternent et de ce fait ralentissent le déroulement de la tâche.

    Avez-vous des suggestions à me proposer afin de m'assurer (ou presque) que le traitement des logs ait lieu à la fin de ma tâche principale ?

  2. #2
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    je ne suis pas sûr que ma réponse soit la meilleure mais bon je propose toujours histoire de lancer le sujet ...

    en utilisant un ThreadPoolExecutor, tu pourrais placer des threads d'écriture du log en file d'attente et les exécuter dans l'ordre en fin de traitement.

    Par contre au final je ne pense pas que ce soit mieux que de stocker dans une structure en mémoire le contenu de ton log et de l'écrire à la fin (enfin en terme de perf)
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  3. #3
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Bonjour,

    Pourquoi ne pas lancer le nouveau thread ( celui chargé du log ) à la fin du thread qui fait les calculs ?

    @+


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    A mon avis la meilleure solution est de faire quelque chose d'intermédiaire.

    Il faudrait définir un nombre maximum de logs à garder en mémoire, et dès que ce nombre est atteint, une thread de priorité basse se lance pour les insérer en base.

    En effet, attendre la fin de l'exécution pour insérer les logs est dangeureux car ça peut être gourmand en mémoire mais tout dépend de la volumétrie des logs de ton application.

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 161
    Points : 168
    Points
    168
    Par défaut
    hello,

    est-ce que tu as pensé à utiliser hibernate pour tes logs ? Ce n'est certainement pas la solution la plus light, mais niveau perf c'est quand même pas mal. Tu pourrais ainsi créér tes logs et les commiter avec une bonne précision.

    Ce n'est qu'une suggestion...

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 142
    Points : 80
    Points
    80
    Par défaut
    Merci pour vos suggestions.

    J'ai finalement décidé d'utiliser une file d'attente et d'y insérer mes requêtes d'insertion de logs. Un thread qui se réveille toutes les 10s s'occupe de vider la file d'attente. J'ai volontairement borné la taille de la file d'attente pour éviter d'utiliser trop de mémoire. Quand la file est remplie, j'envoie un signal d'interruption au thread pour le forcer à se réveiller et faire son traitement habituel.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancer une application multithread avec msdos
    Par SpIrIt505050 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 11/06/2008, 19h47
  2. Quel script pour une application multithreading tournant tel un daemon?
    Par joboy84 dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 04/06/2008, 16h04
  3. variable locale dans une Application multithreading
    Par dev1980 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 13/06/2007, 12h59
  4. log d une application
    Par miniseb dans le forum C#
    Réponses: 3
    Dernier message: 28/02/2007, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo