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 :

Interpréter un fichier log en Java


Sujet :

Logging Java

  1. #41
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Points : 98
    Points
    98
    Par défaut
    J'arrive pas à comprendre ce que tu veux, ni ce que tu as actuellement.

    Tu veux ca:
    2012-06-07;06:25:30;1ScUGn-0002IB-7j;<=;hom@bd.missions-acf.org
    Mais tu as ca ?
    2012-06-0706:25:301ScUGn-0002IB-7j<=hom@bd.missions-acf.org

    Alors avant de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    writer.writeNext(champ);
    Tu ajoutes ";" apres chaque champ[i] (sauf le dernier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int i=0; i<champ.length-1 ;i++)
       champ[i]+=";";
     
    writer.writeNext(champ);

    Tu ne veux pas tout écrire?
    Alors fais le ménage:

    Si tu veux les 5 premiers champs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (champ.length > 5) 
         for(int i=5; i<champ.length ; i++)
              champ[i]="";
     
    writer.writeNext(champ);

  2. #42
    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
    dans la seulle classe csvwriter que je connaisse, writeNext prend un tableau de champs à écrire et met automatiquement les séparateur, les guillements, les échappements. La seule chose c'est qu'il faut instancier le csvwriter avec les paramètres que tu veux utiliser (voir la doc de la classe).

    Pour le reste, le code est un sacré méli-melo. tu stocke dans des objets TraceEmail , que tu n'utilise pas au final, que tu met dans une liste, que tu n'utilise pas, et tu balance directement vers ta sortie tes données non traitées alors que tu t'es cassé le cul à les traiter. Alors faut réfléchir, sortir une feuille de papier est écrire ton algorithme. Et normalement tu devrais arriver à quelque chose comme ça

    1. Ouverture du fichier
    2. Pour chaque ligne
      1. parser la ligne
      2. créer un TraceEmail
      3. ajouter ce TraceEmail à ma List
    3. fermer le fichier
    4. ouvrir en écriture avec csvwriter et les bon séparateurs
    5. pour chaque TraceEmail de la liste
      1. créer une String[] des éléments dont j'ai besoin
      2. la donner à CsvWriter
    6. fermer le fichier

  3. #43
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2012
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Oui c'était la pagaille

    Voilà ou j'en suis :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    try{
    			String f = "/Users/Lazyeight/Documents/workspace/LogRod/exim_mainlog"; // mon fichier
    			 String chaine = "";  //initialisation des variables
    			  String ligne;
    			   InputStream ips=new FileInputStream(f); //déclarations des objets de lecture
    			    InputStreamReader ipsr=new InputStreamReader(ips);
    			     BufferedReader br=new BufferedReader(ipsr);
    			       FileWriter fw = new FileWriter("TEST3.csv", false);
    			       BufferedWriter output = new BufferedWriter(fw);
    			       
    			     List<TraceEmail> list = new ArrayList<TraceEmail>(); //déclaration de notre ArrayList
    
    			     
    			     	while ((ligne=br.readLine())!=null){  //tant qu'il y a des lignes
    			     		chaine = ligne;
    			     		 String[] champ = chaine.split(" "); //on stocke chaque bloc séparé par le caractère espace
    			     		  TraceEmail trace = new TraceEmail(); // le constructeur
    			     		
    			     		 if (champ[2].contains("1S") && champ[3].contains("<=") || champ[3].contains("->") || champ[3].contains("=>")) {
    			     			
    			     				trace.setDmail(champ[0]);
    			     				trace.setHmail(champ[1]);
    			     				trace.setIdmail(champ[2]);
    			     				if (champ[3].contains("<=")) { 
    			     				/*	if (! champ[8].contains("S=")) {
    					     				trace.setTaille(champ[8]);
    					     				} else trace.setTaille(champ[9]); 
    					     		*/ //Pour cette partie ça ne fonctionne pas car forcement sur chacune de mes lignes je n'ai pas forcement de champ 8 et 9 du coup j'ai un jolie OutOfBound :'( une idée de comment je pourrais procéder ?
    			     				trace.setDirection("expediteur");
    			     				}
    			     				else if (champ[3].contains("=>") || champ[3].contains("->") ) { 
    				     				trace.setDirection("destinataire");
    				     				}
    			     				if (champ[4].contains("@")) //ne rien faire et traiter tab[6]
    			     				{
    			     				trace.setAmail(champ[4]); 
    			     				} else if (champ[5].contains("@"))
    			     				{ trace.setAmail(champ[5]); }
    			     				else continue;
    			     					
    			     				list.add(trace);
    			     			
    			     				Collections.sort(list);
    			     				
    				} else { continue; }
    
    			     	}
    output.append("Date"+";"+"Heure"+";"+"Id"+";"+"Direction"+";"+"Adresse Mail"+";"+"Taille"+"\n");
    			     	for(TraceEmail mail : list) {
    			     		output.write(mail.getDmail() +";"+ mail.getHmail() +";"+ mail.getIdmail() +";"+ mail.getDirection() +";"+ mail.getAmail() +";"+ mail.getTaille() + "\n");
    			     		output.flush();
    					}
    			     	System.out.println("Fichier Crée");
    			br.close();
    			output.close();
    ça commence à ressembler à quelque chose non ?

  4. #44
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Petite remarque, tu devrais déclarer String[] champ et TraceEmail trace en dehors du while.

  5. #45
    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
    Citation Envoyé par deathness Voir le message
    Petite remarque, tu devrais déclarer String[] champ et TraceEmail trace en dehors du while.
    au contraire, il ne servent que dans la boucle, ils n'ont pas de raison de se trouver en dehors.

    Par contre, le Collections.sort(list); gagnerait à sortir

  6. #46
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2012
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Ah oui on gagne en perf en effet..

    Par contre j'ai un petit pb je ne sais pas comment je peux faire pour exploiter le S=xxxxx correspondant à la taille de mon mail.
    Du fait qu'on ne retrouve pas ce champ sur chacune des lignes de mon fichier log (champ 8 ou 9 dépendamment des lignes)

    j'ai essayé ceci dans mon while qui lit mes lignes mais forcement j'ai un jolie OutOfBound vu que certaines lignes n'on pas de champ 8 et 9..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (! champ[8].contains("S=")) {
    				      trace.setTaille(champ[8]);
    } else trace.setTaille(champ[9]);
    quelqu'un aurait-il une solution ?

    d'avance merci

  7. #47
    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
    Citation Envoyé par drac08 Voir le message
    j'ai essayé ceci dans mon while qui lit mes lignes mais forcement j'ai un jolie OutOfBound vu que certaines lignes n'on pas de champ 8 et 9..
    Ben la solution c'est simplement de tester la taille de ton tableau :/

Discussions similaires

  1. interprétations de donnée de fichier log
    Par devalender dans le forum Sécurité
    Réponses: 1
    Dernier message: 15/04/2013, 17h52
  2. Parser un flux XML (type fichier de log) en java
    Par zorglubpok dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 28/09/2009, 18h24
  3. fichier log java
    Par salim81 dans le forum Logging
    Réponses: 3
    Dernier message: 10/07/2007, 10h48

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