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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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)

+ 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