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 :

API logging et output XML


Sujet :

Logging Java

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Par défaut API logging et output XML
    Bonjour

    Une petite question que, je le jure, je ne trouve nulle part dans les forums.
    Je me sert de l'API logging (java.util.logging.*), qui fonctionne pour l'instant plutôt bien.

    Je déclare un logger de telle façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class monLogger {
    	public static Logger logger = Logger.getLogger("fr.classtest.monlogger");
     
    	static {
    		try {
    			Handler fh = new FileHandler("fichielog", true);
                           // Le "true" indique qu'il logge à la suite des anciens log.
    			logger.addHandler(fh);
    			logger.log(Level.INFO, "Démarrage du fichier log.");
    		} catch (IOException e){
    			System.err.println("...");
    		}
    	}
    }
    Après deux exécutions, le output xml ressemble à ç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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?xml version="1.0" encoding="windows-1252" standalone="no"?>
    <!DOCTYPE log SYSTEM "logger.dtd">
    <log>
    <record>
      <date>2009-02-27T19:53:42</date>
      <millis>1235760822203</millis>
      <sequence>0</sequence>
      <logger>fr.classtest.monlogger</logger>
      <level>INFO</level>
      <class>fr.classtest.monlogger</class>
      <method>&lt;clinit&gt;</method>
      <thread>10</thread>
      <message>Démarrage du fichier log.</message>
    </record>
    </log>
    <?xml version="1.0" encoding="windows-1252" standalone="no"?>
    <!DOCTYPE log SYSTEM "logger.dtd">
    <log>
    <record>
      <date>2009-02-27T19:55:13</date>
      <millis>2642478964724</millis>
      <sequence>0</sequence>
      <logger>fr.classtest.monlogger</logger>
      <level>INFO</level>
      <class>fr.classtest.monlogger</class>
      <method>&lt;clinit&gt;</method>
      <thread>10</thread>
      <message>Démarrage du fichier log.</message>
    </record>
    </log>
    J'ai deux questions :
    - La plus simple, comment faire pour associer un fichier xsl ? (donc ajouter une ligne de type <?xml-stylesheet type='text/xsl' href='log.xsl'?>)
    - La moins simple : comment faire pour que le logger n'ajoute pas à chaque fois les lignes
    <?xml version="1.0" encoding="windows-1252" standalone="no"?>
    <!DOCTYPE log SYSTEM "logger.dtd">
    et me pourrisse ainsi mon fichier XML ? Bien entendu, j'aimerai conserver mes logs des exécutions précédentes.

    Merci

  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
    Pas possible de retirer ou modifier les entête sans écrire ton propre formatter qui remplacera xmlFormater.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Par défaut
    Hum.
    Merci pour cette réponse, qui à le mérite de m'aiguiller dans la bonne direction.
    Je me renseigne sur les formateur et reposte plus tard.
    Ciao

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Par défaut
    Bonjour
    Selon les conseils de tchize_, j'ai créé mon XMLFormatter :

    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
     
    public class XMLLogFormatter extends XMLFormatter  {
    	boolean writeHead;
     
    	public XMLLogFormatter(boolean writeHead) {
    		super();
    		this.writeHead = writeHead;
    	}	
    	// entête du fichier de log
    	public String getHead(Handler h) {
    		if(this.writeHead){
    			return  "<?xml version=\"1.0\" encoding=\"windows-1252\" standalone=\"no\"?>\n" +
    				    "<?xml-stylesheet type=\"text/xsl\" href=\"log.xsl\"?>\n" +
    				    "<log>\n";
    		} else return "<log>\n";
    	}
    	// fin du fichier de log
    	public String getTail(Handler h) {
    		return "</log>\n";
    	}
    }
    Ce qui me permet de régler mon problème d'associer un fichier xsl (que j'ai ajouté dans la surchage de la méthode getHead), et presque régler mon problème de réécriture des en-têtes (mon booléen writeHead est là pour ça)

    Pourquoi presque ? Parce qu'à chaque fois que je lance mon script, il me crée un nouveau noeud <log></log>, noeud qui sensé être la racine de l'arbre XML (donc sensé être unique). Et les browsers n'aiment pas trop ça, les racines pas uniques.

    Donc mon nouveau problème est de devoir supprimer la dernière ligne du fichier de log (à savoir : "</log>" avant chaque lancement de l'application. Y a t'il un moyen plus simple que d'ouvrir le fichier, tout lire et tout réenregistrer sauf la dernière ligne ? (j'ai pensé à utiliser une commande unix, mais ça doit être portable sous windows...)

    Merci beaucoup et bonne journée

  5. #5
    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
    faut voir à typecaster Handler en FileHandler et voir si ça sait revenir en arrière. Sinon tu risque de devoir aussi créer ton propre handler

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Par défaut
    Tin, mais c'est bizarre, quand même...
    Je ne suis quand même pas le premier gonz à vouloir mettre mes logs dans un fichier Xml ?!

    A vrai dire, je typecaste déjà le Handler en le déclarant tel quel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Handler fh = new FileHandler("log.xml", true);
    Mais le soucis, c'est que le FileHandler est assez pauvre en méthodes...

    Enfin, c'est pas grave, j'ai une autre solution à mon problème, je vais faire autant de fichiers log que d'exécutions de mon appli.
    Pour ceux qui seraient intéressé, il suffit de déclarer le fileHandler de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Handler fh = new FileHandler("log-%g.xml", 1024*1024, 50);
    - %g pour qu'il m'y génère un nombre qui s'incrémente,
    - 1024*1024, c'est la limite de taille de chaque fichier log, en bytes (donc ici c'est 1Mo)
    - 50, c'est le nombre de fichiers log max. Après, ça revient à 0.

    Voilou, à bientôt.
    ... et merci pour le coup de pouce !

  7. #7
    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
    non t'es pas le premier, mais généralement on se contente de retravailler le fichier de log avant de l'envoyer sur un parser xml. Même si tu fait 1 fichier de log par exécution, t'as toujours le problème que ton fichier xml n'est pas correct tant que ton application n'est pas fermée. De plus, t'as pas de garantie qu'en cas de crash du programme, le </log> sera écrit.

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Par défaut
    Ah ouaaaaais... pas con.
    Si je veux vérifier les traces de mon appli en temps réel, en faisant un tail -f, par exemple, c'est foutu...
    Et vu que le format XML, c'est pas très lisible à l'oeil nu, je ferais mieux de passer directement en mode text
    Ok, merci pour les infos en tout cas. Salut !

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

Discussions similaires

  1. [Google Maps] API et xml
    Par zwaldo dans le forum APIs Google
    Réponses: 4
    Dernier message: 21/08/2008, 11h17
  2. API pour excel vers XML
    Par DevServlet dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 08/04/2008, 18h29
  3. [Logging]API Logging de Java
    Par trainscoding dans le forum Logging
    Réponses: 6
    Dernier message: 17/01/2005, 15h21
  4. API log 4j
    Par zola dans le forum Logging
    Réponses: 2
    Dernier message: 11/06/2004, 10h51

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