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

Python Discussion :

Trier par ordre chronologique le contenu d'un fichier log


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Trier par ordre chronologique le contenu d'un fichier log
    Bonjour à tous,

    Voilà mon soucis. J'ai dans un fichier une suite de log venant de plusieurs programmes python. Ces logs se trouvent sous la forme suivante :

    userA : XXX - 2012-06-01 23:41:02,334 - ZZZ - ERROR - [step 2]check failed: sharing.incoming.status:inactive should be equal to active
    userA : XXX - 2012-06-01 23:42:26,509 - ZZZ - ERROR - [step 3]Page number 2 result failed: 2 successive pages failed
    userA : XXX - 2012-06-01 23:43:27,081 - ZZZ - ERROR - [step 3]Page number 3 result failed: 2 successive pages failed
    userA : XXX - 2012-06-01 23:44:27,209 - ZZZ - ERROR - [step 3]Page number 4 result failed: 2 successive pages failed
    userA : XXX - 2012-06-01 23:45:27,621 - ZZZ - ERROR - [step 3]Page number 5 result failed: 2 successive pages failed
    userA : XXX - 2012-06-01 23:46:31,309 - ZZZ - ERROR - [step 3]Page number 6 result failed: 2 successive pages failed
    userA : XXX - 2012-06-01 23:47:31,348 - ZZZ - ERROR - [step 3]Page number 7 result failed: 2 successive pages failed
    userA : XXX - 2012-06-01 23:48:31,108 - ZZZ - ERROR - [step 3]Page number 8 result failed: 2 successive pages failed
    userA : XXX - 2012-06-01 23:48:41,659 - ZZZ - ERROR - [step 3]check failed: sharing.incoming.status:inactive should be equal to active
    userB : XXX - 2012-06-01 23:40:22,965 - ZZZ - ERROR - [step 2]presentation not correctly started
    userB : XXX - 2012-06-01 23:40:50,993 - ZZZ - ERROR - [step 2]check failed: sharing.outgoing.status:inactive should be equal to active
    userB : XXX - 2012-06-01 23:43:00,247 - ZZZ - ERROR - [step 3]Page number 2 result failed: 2 successive pages failed
    userB : XXX - 2012-06-01 23:44:00,665 - ZZZ - ERROR - [step 3]Page number 3 result failed: 2 successive pages failed
    userB : XXX - 2012-06-01 23:45:01,162 - ZZZ - ERROR - [step 3]Page number 4 result failed: 2 successive pages failed
    userB : XXX - 2012-06-01 23:46:04,526 - ZZZ - ERROR - [step 3]Page number 5 result failed: 2 successive pages failed
    userB : XXX - 2012-06-01 23:47:04,608 - ZZZ - ERROR - [step 3]Page number 6 result failed: 2 successive pages failed
    userB : XXX - 2012-06-01 23:48:04,539 - ZZZ - ERROR - [step 3]Page number 7 result failed: 2 successive pages failed
    userB : XXX - 2012-06-01 23:49:04,448 - ZZZ - ERROR - [step 3]Page number 8 result failed: 2 successive pages failed
    userB : XXX - 2012-06-01 23:49:05,993 - ZZZ - ERROR - [step 3]check failed: sharing.outgoing.status:inactive should be equal to active
    userB : XXX - 2012-06-01 23:49:22,784 - ZZZ - ERROR - [step 4]stop sharing not correctly stopped

    Ce que je souhaiterais, c'est avoir ces logs par ordre chronologique. Comme ils sont formatés avec asctime ca doit pouvoir ce faire, mais je bute sur la question...

    Le résultat que je chercher à trouver est le suivant :

    userB : XXX - 2012-06-01 23:40:22,965 - ZZZ - ERROR - [step 2]presentation not correctly started
    userB : XXX - 2012-06-01 23:40:50,993 - ZZZ - ERROR - [step 2]check failed: sharing.outgoing.status:inactive should be equal to active
    userA : XXX - 2012-06-01 23:41:02,334 - ZZZ - ERROR - [step 2]check failed: sharing.incoming.status:inactive should be equal to active
    userA : XXX - 2012-06-01 23:42:26,509 - ZZZ - ERROR - [step 3]Page number 2 result failed: 2 successive pages failed
    .....

    Merci de votre aide. Si vous avez besoin de plus d'info n'hésitez pas.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 357
    Points : 36 886
    Points
    36 886
    Par défaut
    Salut

    Vous pouvez utilisez la fonction sorted décrite dans le wiki.
    Elle permet de préciser sur quel critère effectuer le tri, ce critère pouvant être une fonction qui extrait la date de la ligne du log.

    - W

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Salut,

    Avec itemgetter tu peux identifier un élément d'une liste donnée.

    Ce qui implique de transformer tes lignes en listes.

    Exemple:
    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
     
    # -*- coding: utf-8 -*-
     
    from operator import itemgetter
     
    LINES = ["userA : XXX - 2012-06-01 23:48:41,659 - ZZZ - ERROR - [step 3]foo", 
        "userA : XXX - 2012-06-01 23:42:26,509 - ZZZ - ERROR - [step 3]foo", 
        "userA : XXX - 2012-06-01 23:44:27,209 - ZZZ - ERROR - [step 3]foo", 
        "userA : XXX - 2012-06-01 23:43:27,081 - ZZZ - ERROR - [step 3]foo",  
        "userA : XXX - 2012-06-01 23:45:27,621 - ZZZ - ERROR - [step 3]foo", 
        "userA : XXX - 2012-06-01 23:46:31,309 - ZZZ - ERROR - [step 3]foo", 
        "userA : XXX - 2012-06-01 23:41:02,334 - ZZZ - ERROR - [step 2]foo", 
        "userA : XXX - 2012-06-01 23:47:31,348 - ZZZ - ERROR - [step 3]foo", 
        "userA : XXX - 2012-06-01 23:48:31,108 - ZZZ - ERROR - [step 3]foo", 
        "userB : XXX - 2012-06-01 23:40:22,965 - ZZZ - ERROR - [step 2]foo", 
        "userB : XXX - 2012-06-01 23:40:50,993 - ZZZ - ERROR - [step 2]foo"]
     
    lsts = []
    for l in LINES:
        lsts.append(l.split(" "))
    lst = sorted(lsts, key=itemgetter(5))
    loglines = []
    for l in lst:
        loglines.append(" ".join(l))
    print
    for l in loglines:
        print l
    Ici on ne tient compte que de l'heure, tu devras modifier pour tenir compte de la date en plus.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 357
    Points : 36 886
    Points
    36 886
    Par défaut
    Salut,

    Sur les mêmes LINES, on peut se contenter d'extraire la s/chaine de caractères qui servira à "ranger" les "lignes":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lines = sorted(LINES, key=lambda v: v[14:37])
    print ('%s' % '\n'.join(lines))
    Le vrai souci est côté combien de fichiers, combien de lignes et combien de GB mémoire il faudra pour charger l'ensemble du ou des fichiers.

    - W

  5. #5
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Si le format du log est fixe (même longueur pour les éléments) pourquoi pas.
    Que pensez vous de ceci
    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
    >>> LINES = ["userA : XXX - 2012-06-01 23:48:41,659 - ZZZ - ERROR - [step 3]foo", 
    ...     "userA : XXX - 2012-06-01 23:42:26,509 - ZZZ - ERROR - [step 3]foo", 
    ...     "userA : XXX - 2012-06-01 23:44:27,209 - ZZZ - ERROR - [step 3]foo", 
    ...     "userA : XXX - 2012-06-01 23:43:27,081 - ZZZ - ERROR - [step 3]foo",  
    ...     "userA : XXX - 2012-06-01 23:45:27,621 - ZZZ - ERROR - [step 3]foo", 
    ...     "userA : XXX - 2012-06-01 23:46:31,309 - ZZZ - ERROR - [step 3]foo", 
    ...     "userA : XXX - 2012-06-01 23:41:02,334 - ZZZ - ERROR - [step 2]foo", 
    ...     "userA : XXX - 2012-06-01 23:47:31,348 - ZZZ - ERROR - [step 3]foo", 
    ...     "userA : XXX - 2012-06-01 23:48:31,108 - ZZZ - ERROR - [step 3]foo", 
    ...     "userB : XXX - 2012-06-01 23:40:22,965 - ZZZ - ERROR - [step 2]foo", 
    ...     "userB : XXX - 2012-06-01 23:40:50,993 - ZZZ - ERROR - [step 2]foo"]
    >>> lines = sorted([l.split() for l in LINES], key=lambda v: v[5])
    >>> for l in lines:
    ...     print (' '.join(l))
    ... 
    userB : XXX - 2012-06-01 23:40:22,965 - ZZZ - ERROR - [step 2]foo
    userB : XXX - 2012-06-01 23:40:50,993 - ZZZ - ERROR - [step 2]foo
    userA : XXX - 2012-06-01 23:41:02,334 - ZZZ - ERROR - [step 2]foo
    userA : XXX - 2012-06-01 23:42:26,509 - ZZZ - ERROR - [step 3]foo
    userA : XXX - 2012-06-01 23:43:27,081 - ZZZ - ERROR - [step 3]foo
    userA : XXX - 2012-06-01 23:44:27,209 - ZZZ - ERROR - [step 3]foo
    userA : XXX - 2012-06-01 23:45:27,621 - ZZZ - ERROR - [step 3]foo
    userA : XXX - 2012-06-01 23:46:31,309 - ZZZ - ERROR - [step 3]foo
    userA : XXX - 2012-06-01 23:47:31,348 - ZZZ - ERROR - [step 3]foo
    userA : XXX - 2012-06-01 23:48:31,108 - ZZZ - ERROR - [step 3]foo
    userA : XXX - 2012-06-01 23:48:41,659 - ZZZ - ERROR - [step 3]foo
    ?

    @+

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 920
    Points : 7 312
    Points
    7 312
    Par défaut
    Salut Pausekawa

    Tu ne tries que l'heure, je me trompe?

  7. #7
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour fred1599,

    Exact mais en fait je ne parle que de l'index.

    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
    >>> from operator import itemgetter
    >>>  
    ... LINES = ["userA : XXX - 2012-06-01 23:48:41,659 - ZZZ - ERROR - [step 3]foo", 
    ...     "userA : XXX - 2012-06-01 23:42:26,509 - ZZZ - ERROR - [step 3]foo", 
    ...     "userA : XXX - 2012-09-01 23:44:27,209 - ZZZ - ERROR - [step 3]foo", 
    ...     "userA : XXX - 2012-06-01 23:43:27,081 - ZZZ - ERROR - [step 3]foo",  
    ...     "userA : XXX - 2012-07-01 23:45:27,621 - ZZZ - ERROR - [step 3]foo", 
    ...     "userA : XXX - 2012-06-01 23:46:31,309 - ZZZ - ERROR - [step 3]foo", 
    ...     "userA : XXX - 2012-06-01 23:41:02,334 - ZZZ - ERROR - [step 2]foo", 
    ...     "userA : XXX - 2012-07-01 23:47:31,348 - ZZZ - ERROR - [step 3]foo", 
    ...     "userA : XXX - 2012-09-01 23:48:31,108 - ZZZ - ERROR - [step 3]foo", 
    ...     "userB : XXX - 2012-06-01 23:40:22,965 - ZZZ - ERROR - [step 2]foo", 
    ...     "userB : XXX - 2012-06-01 23:40:50,993 - ZZZ - ERROR - [step 2]foo"]
    >>> 
    >>> lines = sorted([l.split() for l in LINES], key=itemgetter(4,5))
    >>> for l in lines:
    ...     print (' '.join(l))
    ... 
    userB : XXX - 2012-06-01 23:40:22,965 - ZZZ - ERROR - [step 2]foo
    userB : XXX - 2012-06-01 23:40:50,993 - ZZZ - ERROR - [step 2]foo
    userA : XXX - 2012-06-01 23:41:02,334 - ZZZ - ERROR - [step 2]foo
    userA : XXX - 2012-06-01 23:42:26,509 - ZZZ - ERROR - [step 3]foo
    userA : XXX - 2012-06-01 23:43:27,081 - ZZZ - ERROR - [step 3]foo
    userA : XXX - 2012-06-01 23:46:31,309 - ZZZ - ERROR - [step 3]foo
    userA : XXX - 2012-06-01 23:48:41,659 - ZZZ - ERROR - [step 3]foo
    userA : XXX - 2012-07-01 23:45:27,621 - ZZZ - ERROR - [step 3]foo
    userA : XXX - 2012-07-01 23:47:31,348 - ZZZ - ERROR - [step 3]foo
    userA : XXX - 2012-09-01 23:44:27,209 - ZZZ - ERROR - [step 3]foo
    userA : XXX - 2012-09-01 23:48:31,108 - ZZZ - ERROR - [step 3]foo
    Et même: Cela implique que (4,5) existe.

    @+

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour à tous,

    Tout d'abord merci de vos contributions.

    J'ai réussi à résoudre mon pb en faisant déjà une modif sur le formatage, j'ai mis l'heure en premier.

    2012-06-01 23:41:02,334 - userA : XXX - ZZZ - ERROR - [step 2]check failed: sharing.incoming.status:inactive should be equal to active

    Ensuite je fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    with open("errors_logBIS") as trielog:
    	maListe = trielog.readlines()
    	maListe.sort()
    	for line in maListe :
    		#print (line)
    		with open("errors_log",'a') as errors_log_final :
    			errors_log_final.write(line)
    En fait je transforme mon fichier en une liste, et comme sur chaque lignes c'est la date et l'heure qui sont en premier, un .sort() sur la liste permet de mettre dans l'ordre.

    Ensuite dans la boucle for je ré écris dans un autre fichier.

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 920
    Points : 7 312
    Points
    7 312
    Par défaut
    Ah oui mais là tu triches

    Ton fichier de log est-il généré automatiquement?

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    C'est dans un autre programme que sont formatés les log, j'ai donc modifié le formatter des fileHandlers ... en mettant %(asctime)s en premier

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

Discussions similaires

  1. [AC-2013] Trier par ordre chronologique
    Par Palestinian dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 20/11/2014, 15h07
  2. trier par ordre alphabetique le contenu d'une liste deroulante DropDownList
    Par mimijesss dans le forum Développement Sharepoint
    Réponses: 3
    Dernier message: 23/05/2011, 15h29
  3. Réponses: 11
    Dernier message: 28/06/2010, 11h16
  4. Réponses: 1
    Dernier message: 27/05/2006, 23h13
  5. [FAQ] Trier par ordre... non-alphabétique
    Par kaceo dans le forum Langage SQL
    Réponses: 15
    Dernier message: 02/02/2006, 09h17

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