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 :

[java.util.logging] plusieurs logs par API dans une même JVM


Sujet :

Logging Java

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Points : 61
    Points
    61
    Par défaut [java.util.logging] plusieurs logs par API dans une même JVM
    Salut à tous,

    Une question se pose à moi : je bosse sur une grosse application utilisant plusieurs API (internes ou externes). Certaines de ces APIs (en l'occurence les miennes) utilisent le Logger de java (java.util.logging.Logger).
    Ma question est la suivante : est-il possible de configurer via le fichier logging.properties un Handler par API ?... Car aujourd'hui tout est craché dans un seul fichier et du coup la lecture n'est pas comment dire ?... lisible !... (10 Mo en 10 secondes).

    NB : le fait de tuner le niveau de log par API ne me convient pas de ce cas précis (je précise au cas où).

    Merci !

  2. #2
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    est ce que ça t'embeterait de mettre ta config des handlers dans une classe plutot que dans config.properties?
    dans ce cas c'est plus simple d'avoir des handlers spécifiques accrochés à quelques endroits critiques dans l'arbre des packages.
    donc un FileHandler avec certaines caractéristiques pour "com.trucmuche" et un autre pour "org.shadoks" .... + tu ne transmets plus au parent
    par ailleurs la quantité de log m'inquiète un peu ... tu as de bonnes raisons pour ça?
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Points : 61
    Points
    61
    Par défaut
    Je voulais éviter cette solution (codée) et essayer de passer par le fichier de conf, mais visiblement je ne vais pas avoir le choix...

    Pour la taille des logs, c'est "normal" car il s'agit de toutes les traces (Level.ALL) et l'API source est un service appelé par une palanquée d'API's : ce qui génère ces logs.

    Et vous comprendrez mon soucis, tout est dans un seul fichier donc pas très facilement exploitable pour trouver le pourquoi du comment d'un soucis...

    Si d'autres solutions sont envisageables, je suis preneur !...

  4. #4
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par Pignoufy
    Je voulais éviter cette solution (codée) et essayer de passer par le fichier de conf, mais visiblement je ne vais pas avoir le choix...
    non .. c'est pas beaucoup plus compliqué qu'un fichier de conf, d'accord il faut compiler et le mettre accessible du class-path. tu mets le nom de la classe dans "java.util.logging.config.class" et hop!
    très souvent les configs par codes sont plus souples que les configs statiques par fichier.
    autre solution: tu laisses tout dans le même fichier, mais tes logs ont une chaîne d'accompagnement très reconnaissable ... un ti coup de grep et c'est bon!

    edit: Oups c'est vrai que je suis un vieil UNIXiaque blanchi sous le harnois "grep" est un utilitaire unix .... pardon!
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Points : 61
    Points
    61
    Par défaut
    Je sais que ce n'est pas compliqué mais c'est le côté "en dur" qui me gêne...
    Mais effectivement, j'avais déjà proposé la solution du grep (je bosse sous Linux) à mon chef... l'a pas vraiment aimé...

    Merci quand même

  6. #6
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Points : 252
    Points
    252
    Par défaut
    Salut,

    si tu veux te baser sur le fichier de conf à mon avis le mieux est que tu écrives ton propre handler.
    Le principe de ce Handler serait d'être configuré par des tags que tu rajoutes dans le fichier de conf pour définir des fichiers différents par packages (par exemple). Dans la méthode publish du Handler tu ferais l'aiguillage vers tel ou tel fichier préalablement configuré.

    Tu peux aller voir sur mon blog un exemple d'extension de l'API java.util.logging. Tu pourras trouver un exemple de Handler et regarder comment je parse le fichier de conf pour le Formatter que j'avais écrit.

    J'espère que ça t'aidera.

    Tiens nous au courrant de tes avancées, ça peut être un Handler intérressant.

    Matthieu
    Quelques tips Java & autres : mon blog

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Points : 61
    Points
    61
    Par défaut
    Histoire de conclure (un peu tardivement) sur le sujet, l'API log4j permet de faire ce que je voulais faire à l'époque : les handlers sont configurables par fichier de conf.

  8. #8
    Membre régulier Avatar de waldo2188
    Profil pro
    Chef de projets
    Inscrit en
    Mars 2004
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets

    Informations forums :
    Inscription : Mars 2004
    Messages : 115
    Points : 113
    Points
    113
    Par défaut
    Salut,

    Je suis à la recherche d'une solution similaire à la tienne, pourrais-tu nous faire par de l'implémentation de ta solution.

    D'avance merci
    Waldo2188

  9. #9
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par waldo2188 Voir le message
    Salut,

    Je suis à la recherche d'une solution similaire à la tienne, pourrais-tu nous faire par de l'implémentation de ta solution.

    D'avance merci
    Salut waldo2188,

    Comme je le disais dans mon précédent post, il n'y a pas de solution "toute prète" si tu utilises le loggger de Java (java.util.logging).

    En revanches, le logger de la fondation Apache, log4j, permet ce genre de fonctionnalités via un fichier de configuration (properties ou xml) ou via une implémentation applicative (à éviter à mon sens).

    Quel est ton besoin exactement ?

  10. #10
    Membre régulier Avatar de waldo2188
    Profil pro
    Chef de projets
    Inscrit en
    Mars 2004
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets

    Informations forums :
    Inscription : Mars 2004
    Messages : 115
    Points : 113
    Points
    113
    Par défaut
    Je travaille actuellement sur une application GWT utilisant Spring et Hibernate (deux gros producteurs de logs).

    Ces deux composant requière log4j, j'ai donc déjà un fichier de configuration de type "properties", dont voici le contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ### direct log messages to stdout ###
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    log4j.rootLogger=debug, stdout
    log4j.logger.org.hibernate=info
    log4j.logger.org.hibernate.SQL=debug
    log4j.logger.org.hibernate.tool.hbm2ddl=info
    log4j.logger.org.hibernate.cache=info
    A l'heure actuelle tout les logs sortent dans un fichiers journalisé.

    Ce que je cherche à réaliser c'est séparer dans deux fichiers distinct les logs Hibernate, Spring, GWT,... et ceux que j'implanterais dans l'application que je développe.

    En tout cas, merci pour ta rapidité de réponse!
    Waldo2188

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Points : 446
    Points
    446
    Par défaut
    Pour écrire dans plusieurs fichiers, il te faut plusieurs appenders !

    Ce qui donnerait qquechose comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
    log4j.appender.API=org.apache.log4j.FileAppender
    log4j.appender.API.file=api.log
    
    log4j.appender.My_app=org.apache.log4j.FileAppender
    log4j.appender.My_app.file=mon_application.log
    
    log4j.rootLogger=warn, stdout
    
    log4j.logger.org.hibernate=info, API
    log4j.logger.org.hibernate.SQL=debug, API
    log4j.logger.org.hibernate.tool.hbm2ddl=info, API
    log4j.logger.org.hibernate.cache=info, API
    
    log4j.logger.<my.app.package1>=info, My_app
    log4j.logger.<my.app.package1.package2>=debug, My_app
    Il est agréable d'avoir le choix. La difficulté est alors de faire le bon (ou le moins pire).

  12. #12
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Fifan31 Voir le message
    Pour écrire dans plusieurs fichiers, il te faut plusieurs appenders !

    Ce qui donnerait qquechose comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
    log4j.appender.API=org.apache.log4j.FileAppender
    log4j.appender.API.file=api.log
    
    log4j.appender.My_app=org.apache.log4j.FileAppender
    log4j.appender.My_app.file=mon_application.log
    
    log4j.rootLogger=warn, stdout
    
    log4j.logger.org.hibernate=info, API
    log4j.logger.org.hibernate.SQL=debug, API
    log4j.logger.org.hibernate.tool.hbm2ddl=info, API
    log4j.logger.org.hibernate.cache=info, API
    
    log4j.logger.<my.app.package1>=info, My_app
    log4j.logger.<my.app.package1.package2>=debug, My_app
    +1

    Fifan31, tu as été plus rapide que moi ;P

    Grâce à log4j, tu peux facilement spécifier des appenders particuliers par logger... Juste une petite remarque, mieux vaut utiliser un RollingFileAppender qui est plus pratique surtout lorsque les applis sont "généreuses" en terme de logs...

  13. #13
    Membre régulier Avatar de waldo2188
    Profil pro
    Chef de projets
    Inscrit en
    Mars 2004
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets

    Informations forums :
    Inscription : Mars 2004
    Messages : 115
    Points : 113
    Points
    113
    Par défaut
    Merci,

    je l'ai mis en place hier soir et cela fonctionne à merveille.

    Et effectivement, aujourd'hui j'attaque la partie RollingFileAppender.

    Merci de votre aide!
    Waldo2188

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

Discussions similaires

  1. Afficher un même JPanel dans plusieurs onglets de JTabbedPane (dans une même JFrame)
    Par laurent.fructus dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 17/03/2014, 08h06
  2. Réponses: 22
    Dernier message: 22/05/2013, 17h52
  3. Réponses: 4
    Dernier message: 31/08/2010, 17h45
  4. [MySQL] Plusieurs enregistrements à la fois dans une même table
    Par cysedbs dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/12/2008, 10h37
  5. Plusieurs style de liens dans une même page
    Par keishah dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 23/08/2006, 14h22

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