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 :

[Log4j] Pattern à modifier


Sujet :

Logging Java

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 137
    Par défaut [Log4j] Pattern à modifier
    Bonjour,

    J'ai crée une classe spécifique pour paramétrer tous les logs afin d'éviter de mettre 5 ligne de code à chaque endroit où je mets mon log.

    je crée une classe Log.java et je mets à l'intérieur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static void error(String texte){
    		Logger log = Logger.getLogger("org");
    		PatternLayout layout = new PatternLayout("%d %-5p %c - %F:%L - %m%n");
    		try {
    			log.addAppender(new FileAppender(layout, "./log/Adoc.log"));
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		log.info(texte);
    		log.setLevel(Level.ERROR);
    	}
    et je l'appelle dans un fichier TableOfContents.java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.error("Fichier Table des matières non chargé");
    Et je regarde dans mon fichier Adoc.log, pb :

    2010-02-02 15:05:23,411 INFO org - Log.java:57 - Fichier Table des matières non chargé



    Il me spécifie l'endroit où se situe le log (Log.java) et non pas TableOfContents.java or je voudrais récupérer la ligne qui pose problème dans TableOfContents.java.

    Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Marvelll Voir le message
    Bonjour,

    J'ai crée une classe spécifique pour paramétrer tous les logs afin d'éviter de mettre 5 ligne de code à chaque endroit où je mets mon log.
    un log ca prend une ligne, pas besoin de créer une méthode statique pour ça, sinon, tu perd en performance et, comme tu viens de la voir, en informations.


    c'est comme ça qu'on fait du logging:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class MaClasse{
        private static Logger log = Logger.getLogger("org");
        // ou alternativement,
        // private static Logger log = Logger.getLogger(MaClasse.class);
     
     
        // ....
        // dans une méthode quelconque, quand on a besoin de logguer un erreur
        log.error("ceci est une erreur");
        // dans une méthode quelconque, quand on a besoin de logguer une info de base
        if (log.isDebugEnabled())
          log.debug("ceci est une information de debug complexe: "+unMessageDeDebugLongAGenerer());
    }
    Il n'est de plus pas recommandé d'utiliser %F et %l, ces informations sont longues et complexes à générer, ca ne se justifie que pour les logs d'erreur (une fois toutes les lustres) mais pas pour des logs de debug ou d'info qui peuvent etre nombreux aux cours de l'exécution de l'applicaiton (et plomber donc les performances)

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 137
    Par défaut
    Mais si je fais avec votre méthode, je perds les informations qui me sont absolument vitale comme la date et le numéro de la ligne.

    En clair, je dois avoir dans mon log lorsque j'ai une erreur le maximum d'informations sur l'erreur. Par exemple, si je file l'appli que je développe à un gars et qu'il me le retourne en me disant que ça ne marche pas. J'aimerais bien savoir ce qui ne marche pas et à quel moment, ça a planté.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    fichier: suffit de donner au logger le nom de ta classe (cf commentaire en haut de ma classe)
    numéro de ligne: dans 99.9% des cas inutiles. Avec le nom de classe et le message de log, il est toujours possible de retrouver la ligne qui l'a générer, il est rare que deux endroit dans une même classe génèrent exactement le même message de log. Et si c'est le cas, ben change en ai pour qu'il n'y aie plus ambiguité. Il faut bien réaliser que mettre le numéro de ligne et le nom de fichier,ça bouffe des ressources à calculer. Donc à savoir.

    Dans tous les cas, je vois pas en quoi ma méthode (cf code) a avoir avec les données que tu affiche. Ta méthode n'a pas à définir les appender et le pattern à chaque appel. C'est configuré une fois pour toutes au démarrage de log4j.

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 137
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Dans tous les cas, je vois pas en quoi ma méthode (cf code) a avoir avec les données que tu affiche. Ta méthode n'a pas à définir les appender et le pattern à chaque appel. C'est configuré une fois pour toutes au démarrage de log4j.
    Je n'ai rien défini au démarrage de log4j. Où est-ce que tu définis les appender et le pattern???

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    log4j.xml ou log4j.properties, dans la pluspart des cas (voir la doc log4j là dessus)

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 137
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    log4j.xml ou log4j.properties, dans la pluspart des cas (voir la doc log4j là dessus)
    Lol, tu vas rigoler mais où est ce fichier log4j.properties??

    Sinon je voudrais juste le spécifier mais mon log, je voudrais l'utiliser dans plusieurs classes et non pas une seule. Ce que je veux en fait c'est avoir une configuration du log commune pour toutes les log qui seront utilisés dans les différentes classes.

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Marvelll Voir le message
    Lol, tu vas rigoler mais où est ce fichier log4j.properties??
    As-tu consulté la doc de log4j avant de l'utiliser? Le fichier de config se met à la racine du classpath, tout simplement. Quand aux possiiblités de log4j, j'ai du mal à comprendre ta question, mais log4j supporte autant de logger que tu veux avec autant de appender que tu veux, mixés comme tu l'entends.

  9. #9
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 137
    Par défaut
    C'est bon que je commence à comprendre, sinon j'avoue j'ai parcouru assez rapidement la doc donc j'ai du sauter le passage en parlant.

    Sinon merci beaucoup, c'est beaucoup plus clair à présent.

  10. #10
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 137
    Par défaut
    Comment rajoute-t-on un fichier .properties à la classpath sous Eclipse? J'ai crée un fichier comme ce qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    log4j.rootLogger=error, file 
     
    log4j.appender.file=org.apache.log4j.FileAppender 
    log4j.appender.file.layout=org.apache.log4j.PatternLayout 
    log4j.appender.file.layout.ConversionPattern=%5p [%t] (%F\:%L) - %m%n 
    log4j.appender.file.File=./log/Adoc.log 
    log4j.appender.file.append=false
    Malheureusement, dans le buildpath d'Eclipse, on ne peut rajouter que des jar ou des folders? Faut-il mettre le fichier properties dans un folder et le rajouter?

    Edition: solution trouvée.

    Alors pour ceux qui ont le même problème que moi. Vous prenez le fichier log4j.properties, vous le complétez et vous le mettez dans un dossier de votre choix. Puis vous rajoutez ce dossier à partir de propeties-->Buildpath-->Source et vous rajoutez le dossier contenant le fichier .properties et tout devrait marcher.

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

Discussions similaires

  1. log4j nom de la methode par pattern ?
    Par pcouas dans le forum Logging
    Réponses: 1
    Dernier message: 27/11/2009, 00h56
  2. log4j appender.sql modifiable par le code
    Par audklie2 dans le forum Logging
    Réponses: 4
    Dernier message: 27/05/2009, 15h49
  3. Réponses: 3
    Dernier message: 29/08/2007, 09h11
  4. Réponses: 3
    Dernier message: 04/07/2007, 10h14
  5. Modifier en temps réel log4j.properties
    Par Lebas dans le forum Logging
    Réponses: 5
    Dernier message: 02/02/2007, 12h45

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