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

Scripts/Batch Discussion :

Analyse de fichier log en temps réel [Batch]


Sujet :

Scripts/Batch

  1. #1
    Candidat au Club
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : technicien
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Analyse de fichier log en temps réel
    Bonjour tout le monde,

    J'essaye actuellement de créer un scripte .bat en Batch, je suis débutant et me suis servi des infos glané sur le net pour rédiger une bonne partie du programme avec succès, mais il me manque une fonction essentielle.


    J'ai besoin d'un scripte pour relier deux logiciels automatiquement. Le premier analyse en temps réel une situation et quand il détecte une action il l'écrit sur un fichier log. J'ai besoin que quand certaines de ces actions se produisent, automatiquement le second logiciel réalise une action.

    J'ai réussi à rédiger un scripte qui analyse le fichier log (avec for /f) et repère les moments ou les actions voulues se déroule. J'ai aussi réussi a envoyé un ordre au second logiciel via son api et la commande wget que j'ai installé.

    Ce qui me manque maintenant c'est de pouvoir réaliser l'analyse du fichier log en temps réel, pour que le script puisse tourner en continu, et envoyer l'impulsion réseau dès qu'il détecte l'action spécifique(via le fichier log).

    De quel manière me conseillez-vous de procéder ?


    Merci beaucoup d'avoir pris le temps de lire.



    PS voici mon script si vous avez des remarques :

    Code Batch : 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
    @echo off
     
     
    setlocal enabledelayedexpansion
     
    set var=variable
     
     
    for /f "tokens=4 delims=," %%a in ('type "C:\Users\utilisateur\Documents\.log"') do (
     
    set var=%%a
     
    if "!var:~0,4!" == "Sent" 	(
    echo !var:~6!
    "C:\Program Files (x86)\GnuWin32\bin\wget.exe" -Pdownload \ http://localhost:8088/API/?Function10
    						))
     
    rem pause

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 201
    Points : 5 795
    Points
    5 795
    Par défaut
    Une fois qu'il y aura une ligne qui débute par Sent, ton analyse la trouvera toujours et enverra l'impulsion.


    PS voici mon script si vous avez des remarques :
    J'aurai utilisé un findstr et un &&

  3. #3
    Candidat au Club
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : technicien
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour ericlm128,


    Merci pour votre réponse.


    Mon problème est que une fois que le script arrive à la dernière ligne du .log, il s'arrête. Alors que quelques secondes plus tard, une nouvelle ligne s'ajoute, si je relance le script, il recommence à tout analyser.

    J'aurais besoin qu'il reste actif une fois arrivé à la dernière ligne du .log, et que chaque nouvelle ligne soit analysée aussitôt ajouté au log. ¨Pour faire simple, j'aimerais que le script "reste à l'écoute" du fichier log.


    Quelle serait l'avantage d'utiliser les commandes findstr et && ?


    Merci,
    Clément

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 201
    Points : 5 795
    Points
    5 795
    Par défaut
    Je comprend mais ça ne sera pas aussi simple.

  5. #5
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    le plus simple serait de tuer le log à chaque lecture (ou renommer) et le traiter a chaque creation!
    ainsi on aura toujours que les dernières info!

  6. #6
    Membre expérimenté
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    664
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 664
    Points : 1 454
    Points
    1 454
    Par défaut
    Une piste sous forme de pseudocode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    mesure taille du log
    :boucle1
    FOR 
        traitement log avec comptage du nombre de lignes traitées
    :boucle2
    si taille du log différente
        enregistrement de la nouvelle taille, 
        boucle1 sur FOR avec un SKIP= nombre de lignes déjà traitées
    sinon
        attendre quelques secondes, puis boucle2

  7. #7
    Candidat au Club
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : technicien
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour tout le monde et merci pour vos propositions.



    Je me suis servi du pseudo code de kaitlyn (merci beaucoup !) et ça marche presque. Je rencontre un souci car j'ai des lignes vide dans le fichier log et donc"for /f" ne les prends pas en compte ce qui induit un décalage quand je compte les ligne (et donc les lignes de la fin sont traité plusieurs fois).



    Réécrire le fichier log en remplaçant les lignes vides par un caractère spécial pourrait être une solution mais dans un premier temps j'aimerais éviter.

    y a t-il une astuce pour que "for /f" prenne en compte les ligne vide également ?

    Merci,
    Clem

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 201
    Points : 5 795
    Points
    5 795
    Par défaut
    y a t-il une astuce pour que "for /f" prenne en compte les ligne vide également ?
    Non.

    Mais je ne vois pas pourquoi il y aurai un décalage :
    - Tu compte une première fois (sans les lignes vides)
    - Tu compte une deuxième fois (sans les lignes vides)

  9. #9
    Candidat au Club
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : technicien
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Analyse de fichier log en temps réel
    Dans l'état actuel des choses, s'il y a 20 ligne dont 5 de video, le compteur détecte 15 ligne, donc le skip=15 ligne, les ligne de 16 à 20 sont donc retraité à nouveau.

    mon code :

    Code batch : 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
    @echo off
     
     
    setlocal enabledelayedexpansion
     
    set var=variable_text
    set long=1
    set mesure=0
     
     
    echo %long%
    :debut
     
    for /f "skip=%long% delims=" %%a in ('type "C:\Users\utilisateur\Documents\17 janvier 2020.log"') do ( 
    																								set /a mesure=!mesure!+1 
    																								set var=%%a
    																								echo !var!
    																															)
     
     
     
    echo la mesure apres la premiere passe est de %mesure%																		
     
     
     
    for /f "tokens=4 delims=, skip=%long%" %%a in ('type "C:\Users\utilisateur\Documents\vMixSocial\17 janvier 2020.log"') do (
     
     
    																		set var=%%a																			
    																		if "!var:~0,4!" == "Sent" (
    																									rem echo !var:~6!
    																									rem "C:\Program Files (x86)\GnuWin32\bin\wget.exe" -Pdownload \ http://localhost:8088/API/?Function=Cut
    																									)
    																		rem TIMEOUT 1
     
     
    																															)																							
    set /a long=%long%+%mesure%																		
     
    echo la mesure est de %mesure%
    set mesure=0
    echo avant le goto, la longueur est de %long%
     
    pause
     
    goto debut

  10. #10
    Candidat au Club
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : technicien
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Finalement en utilisant

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f %%a in ('find /c /v "" ^<"C:\Users\utilisateur\Documents\vMixSocial\%fichier%.log"') do ( set mesure=%%a )

    j'ai réussi à obtenir le nombre de ligne.


    Merci à tous !

  11. #11
    Membre expérimenté
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    664
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 664
    Points : 1 454
    Points
    1 454
    Par défaut
    P.-S.

    La taille du fichier log était sous-entendue en octets.

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

Discussions similaires

  1. [PHP 5.3] ssh2 / Lire un fichier de log en temps réel
    Par harmonyk dans le forum Langage
    Réponses: 0
    Dernier message: 26/12/2011, 03h16
  2. Perl analyse de fichiers-logs
    Par finelady dans le forum Langage
    Réponses: 4
    Dernier message: 18/03/2008, 17h31
  3. log4j : voir les log en temps réel
    Par restricteur dans le forum Logging
    Réponses: 1
    Dernier message: 12/10/2007, 00h47
  4. Des logiciels pour l'analyse des fichiers log
    Par maya dans le forum Réseau
    Réponses: 3
    Dernier message: 14/04/2007, 22h27
  5. Programme qui analyse un fichier log
    Par abdou.sahraoui dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 20/08/2004, 14h27

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