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 :

Logger - Ecrire dans un seul fichier de log


Sujet :

Logging Java

  1. #1
    Membre régulier Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Points : 76
    Points
    76
    Par défaut Logger - Ecrire dans un seul fichier de log
    Bonjour,

    Je tente d'utiliser la classe Logger afin de créer un fichier de log pour mon application.

    J'aimerai avoir un seul fichier pour tous les log de l'application mais malgré le code que j'ai écris, j'obtiens un nouveau fichier à chaque fois que je change de classe.

    Voici mon code :

    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
     
    //Déclaration
    private static final Logger log = Logger.getLogger("myLog");
    ...
     
    //Dans le constructeur
    try
    {
       FileHandler fh = new FileHandler("myLog.txt", true);
       log.addHandler(fh);
    }
    catch (Exception e)
    {
       System.out.println(e.getMessage());
    }
    J'utilise le même code dans toutes les classes où j'ai besoin du fichier de log.

    Au final, dans mon répertoire, j'ai ce genre de choses comme fichiers :
    myLog.txt
    myLog.txt.1
    myLog.txt.1.lck
    myLog.txt.2
    myLog.txt.2.lck
    myLog.txt.3
    myLog.txt.lck
    myLog.txt.lck

    Pourriez-vous me dire comment n'obtenir qu'un seul fichier myLog.txt

    Je pense que le problème vient du fait que le fichier est locké et que c'est pour ça qu'il en rescrée un à chaque fois mais comment éviter cela ???

    D'avance merci.
    miniil

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    c'est étonnant. Sans paramètre supplémentaire, il n'est pas censé faire de cycle. Essaie plutot

    new FileHandler("myLog.txt", Integer.MAX_VALUE, 1, true);

  3. #3
    Membre régulier Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Points : 76
    Points
    76
    Par défaut
    Bon, en attendant la réponse, j'ai revérifié mon code.

    Je me suis rendue compte que j'ajoutais cette ligne de code dans chaque JPanel où j'avais besoin du fichier de log :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileHandler fh = new FileHandler("myLog.txt", true);
    Le fait de chaque fois recréer le FileHandler n'était peut-être pas une bonne solution ?

    Du coup, je n'ai laissé que cette ligne dans chaque JPanel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final Logger log = Logger.getLogger("myLog");
    Afin de récupérer mon logger.

    Et je ne crée le FileHandler que dans la classe Main.

    Est-ce comme ça que je dois procéder à votre avis?
    miniil

  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
    IL n'y aurait pas par hasard confusion sur le sens du paramètre de getLogger?
    le paramètre est le nom d'une partie de l'application sous surveillance (à mon humble avis généralement un package) et n'a rien à voir avec le nom du fichier de log.
    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 à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 75
    Points : 22
    Points
    22
    Par défaut
    Bonjour,
    j'ai le même problème.

    J'ai des logs de ce genre avec un fichier lck, a chaque lancement il me créer un nouveau fichier log:
    myLog.txt.1
    myLog.txt.1.lck
    myLog.txt.2
    myLog.txt.2.lck

    Ce code est utilisé dans un WebService qui tourne sur un serveur distant (glassfish).
    Si je récupère ce même code sur mon poste de dév (websphère) et que je le lance dans une classe test main:
    j'obtiens bien un seul log sans le fichier lck et a chaque fois que j'exécute ce main, il me rajoute des lignes de log au fichier déjà créé.

    Comment expliquer cette différence ?
    Comment puis-je faire pour n'avoir qu'un fichier log ?
    Utilise t'il le logging.properties et comment faire pour l'utiliser si c'est une meilleur solution?

    Merci




    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
    		// Test log :
    		Logger monLog = Logger.getLogger(NotifCobalt.class.getName());
    		monLog.setLevel(Level.ALL); //pour envoyer les messages de tous les niveaux
    		FileHandler aFileHandler;
    		try {
     
    			aFileHandler = new FileHandler("c:\\"+MaClass.class.getName()+".log", true);
    			monLog.addHandler(aFileHandler);
    		    SimpleFormatter formatter = new SimpleFormatter();
    		    aFileHandler.setFormatter(formatter);
     
    		} catch (IOException e1) {
    			// TODO Bloc catch auto-généré
    			e1.printStackTrace();
    		}
     
    		monLog.log(Level.WARNING,"test log warning");
    		monLog.log(Level.INFO,"test log info");

Discussions similaires

  1. lire/ecrire plusieurs graphes dans un seul fichier avec Networkx
    Par mohsenuss91 dans le forum Général Python
    Réponses: 3
    Dernier message: 15/02/2015, 18h02
  2. Réponses: 5
    Dernier message: 18/04/2007, 18h57
  3. Ecrire dans une seule ligne
    Par jbidou88 dans le forum Access
    Réponses: 4
    Dernier message: 04/09/2006, 14h52
  4. enregistrer deux fichier dans un seul fichier
    Par Bourak dans le forum Langage
    Réponses: 9
    Dernier message: 05/11/2005, 09h48

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