[..] Script pour "nettoyer" des fichiers logs
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[..] Script pour "nettoyer" des fichiers logs
Bonjour,
Je travaille en tant que Technicien Systèmes et Réseaux pour une société et je suis totalement (ou quasi totalement) novice en scripting.
J'ai mis en place, récemment, un système de sauvegarde de tout notre Système d'Information.
Il y a un serveur, dans notre architecture, sur lequel, tous les jours, est créé un fichier de logs qui fait 500 Mo. Ce serveur ne nous appartient pas (je ne peux donc pas modifier les paramètres de rotation de logs de l'application sur ce serveur) mais nous avons à charge de la sauvegarder quand même (et ça prend trop de place sur ma sauvegarde).
Alors, au lieu de les supprimer à la main à chaque fois, je voulais créer un script (AutoIT) qui supprime (en fonction des dates) les fichiers qui datent de plus d'un mois mais je galère à le faire ce script.
Il y a un autre serveur sur lequel j'aimerais mettre en place cela mais je m'inspirerais du premier.
Pouvez-vous m'aider svp?
Merci d'avance.
Cordialement.
Je travaille en tant que Technicien Systèmes et Réseaux pour une société et je suis totalement (ou quasi totalement) novice en scripting.
J'ai mis en place, récemment, un système de sauvegarde de tout notre Système d'Information.
Il y a un serveur, dans notre architecture, sur lequel, tous les jours, est créé un fichier de logs qui fait 500 Mo. Ce serveur ne nous appartient pas (je ne peux donc pas modifier les paramètres de rotation de logs de l'application sur ce serveur) mais nous avons à charge de la sauvegarder quand même (et ça prend trop de place sur ma sauvegarde).
Alors, au lieu de les supprimer à la main à chaque fois, je voulais créer un script (AutoIT) qui supprime (en fonction des dates) les fichiers qui datent de plus d'un mois mais je galère à le faire ce script.
Il y a un autre serveur sur lequel j'aimerais mettre en place cela mais je m'inspirerais du premier.
Pouvez-vous m'aider svp?
Merci d'avance.
Cordialement.
- Tlem
- Site Admin

- Messages : 11798
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..] Script pour "nettoyer" des fichiers logs
Si les fichiers sont dans un même dossier accessible depuis votre PC, la fonction _FileListToArray vous permettra de créer un tableau avec la liste des fichiers du dossier (sinon utilisez la fonction _FileListToArray3 de ce message : http://www.autoitscript.fr/forum/viewto ... f=21&t=479 qui permet une recherche récursive).
Ensuite, une boucle For/Next de lecture du tableau vous permettra de lister chaque élément du tableau.
Avec chacun de ces éléments, deux choix :
- Soit la date est dans le nom et dans ce cas il faut créer un traitement de contrôle.
- Soit vous testez les propriétés du fichier pour en retirer la date de création ou de dernière modification avec la fonction FileGetTime
Une fois le traitement effectué, vous savez si le fichier doit être gardé ou supprimé, donc toujours dans la boucle et à la suite du traitement vous contrôlé l'age du fichier et effectuez le traitement adéquate.
Ensuite, une boucle For/Next de lecture du tableau vous permettra de lister chaque élément du tableau.
Avec chacun de ces éléments, deux choix :
- Soit la date est dans le nom et dans ce cas il faut créer un traitement de contrôle.
- Soit vous testez les propriétés du fichier pour en retirer la date de création ou de dernière modification avec la fonction FileGetTime
Une fois le traitement effectué, vous savez si le fichier doit être gardé ou supprimé, donc toujours dans la boucle et à la suite du traitement vous contrôlé l'age du fichier et effectuez le traitement adéquate.
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
- jl56
- Niveau 7

- Messages : 415
- Enregistré le : mer. 24 oct. 2007 22:42
- Localisation : 56000
- Status : Hors ligne
Re: [..] Script pour "nettoyer" des fichiers logs
bonjour,
J'ai eu le même besoin pour effacer des fichiers catalogue de sauvegarde, je viens d'adapter la partie du code
au fichier log et j'ai commenté les lignes
A+ JL56
J'ai eu le même besoin pour effacer des fichiers catalogue de sauvegarde, je viens d'adapter la partie du code
au fichier log et j'ai commenté les lignes
Code : Tout sélectionner
#include <Date.au3>
$repertoire="c:\testlog\" ; dossier ou se trouve les fichiers log
$datejour = _DateToDayValue (@YEAR, @MON, @MDAY)
$delai=15 ; variable définissant le délai en jour pour l'effacement des fichiers
$search = FileFindFirstFile ($repertoire&"*.log") ; recherche des fichiers log
If $search = -1 Then
MsgBox(4096,"erreur de répertoire des fichiers log"," vérifier le dossier "&@CRLF&$repertoire,10)
Else
While 1 ; boucle pour tester les fichiers l'un apres l'autre
$fichier_a_fac = FileFindNextFile($search)
If @error Then ExitLoop
$t=FileGetTime($repertoire&$fichier_a_fac,0)
$vrr=_DateToDayValue ($t[0] , $t[1] , $t[2]) ; calcul la date du fichier
if $vrr<($datejour-$delai) Then ; si la date du fichier est supérieur à (la date du jour - le délai) alors effacement du fichier
;~ FileDelete ($repertoire&$fichier_a_fac) ; effacement du fichier
MsgBox(4096,"fac le fichier",$repertoire&$fichier_a_fac) ; msgbox pour vérifier que les
;~ fichiers effacés sont les bon
;~ ensuite valider la ligne ci dessus
EndIf
WEnd
EndIf
FileClose($search)Re: [..] Script pour "nettoyer" des fichiers logs
Bonjour,
pour le traitement d'un fichier log de 500mo, il vaut mieux le faire en perl, bien plus performant qu'AutoIt pour le traitement des gros fichiers.
j'utilise beaucoup l'association AutoIt / Perl pour mes épluchages de logs, je peux éventuellement donner un coup de main pour la réalisation du script
pour le traitement d'un fichier log de 500mo, il vaut mieux le faire en perl, bien plus performant qu'AutoIt pour le traitement des gros fichiers.
j'utilise beaucoup l'association AutoIt / Perl pour mes épluchages de logs, je peux éventuellement donner un coup de main pour la réalisation du script
Re: [..] Script pour "nettoyer" des fichiers logs
Bonjour,
Je ne connais absolument pas le Perl. Mais je suis preneur tout est bon à prendre. Ça me sera toujours utile.
Merci.
Cordialement.
Je ne connais absolument pas le Perl. Mais je suis preneur tout est bon à prendre. Ça me sera toujours utile.
Merci.
Cordialement.
Re: [..] Script pour "nettoyer" des fichiers logs
tout d'abord, il te faudra installer ActivePerl
ensuite construire un fichier fichier.pl qui contiendra ceci :
ce code la va ouvrir en lecture le fichier LOG_ORIGINE.txt,
rechercher la reg exp MA_RECHERCHE sur chaque ligne ($_ = une ligne) de ce fichier, et copier la (ou les) ligne(s) contenant cette expression MA_RECHERCHE dans le fichier RESULTAT.txt
en sachant ça tu peux, dans le script auto-it, faire en sorte de rechercher plusieurs reg exp différentes, stockées par exemple dans un fichier recherche.txt, via une boucle en modifiant directement fichier.pl avant de l'exécuter :par contre, le fichier recherche.txt ne doit contenir aucune ligne vide...
il est possible de convertir la liste en tableau, ce qui évite ce genre de contraintes :Ici, si le script trouve une ligne vide dans recherche.txt, il l'ignore et passe à la suite.
A la fin du traitement, uniquement les lignes contenant les expressions qui t'intéressent seront recopiées dans le nouveau fichier RESULTAT.txt. Attention, pour chaque nouvelle exécution, il faudra d'abord détruire le fichier RESULTAT.txt, sinon il sera automatiquement incrémenté.
Edit. après réflexion, je crois que l'épuration du fichier log lui même n'était pas le but recherché, uniquement le tri de tous les fichiers logs contenus dans le dossier.
SEISHIRO, pourrais tu confirmer que le but de la manœuvre est d'épurer 1 log, et non pas d'épurer un dossier contenant plusieurs logs ?
S'il s'agit d'épurer 1 seul log, pourrais tu en copier quelques lignes pour en voir la structure ?
ensuite construire un fichier fichier.pl qui contiendra ceci :
Code : Tout sélectionner
#!/usr/local/bin/perl
open(LIRE,"LOG_ORIGINE.txt") || die ("Erreur de lecture de LIRE") ;
open(ECRIRE,">>RESULTAT.txt") || die ("Erreur de creation de ECRIRE") ;
while (<LIRE>) {
if ($_ =~ m/MA_RECHERCHE/) {
print ECRIRE $_ ;
}
}
close(LIRE);
close(ECRIRE); rechercher la reg exp MA_RECHERCHE sur chaque ligne ($_ = une ligne) de ce fichier, et copier la (ou les) ligne(s) contenant cette expression MA_RECHERCHE dans le fichier RESULTAT.txt
en sachant ça tu peux, dans le script auto-it, faire en sorte de rechercher plusieurs reg exp différentes, stockées par exemple dans un fichier recherche.txt, via une boucle en modifiant directement fichier.pl avant de l'exécuter :
Code : Tout sélectionner
#include <file.au3>
$file=fileopen("recherche.txt",0)
while 1
$line = filereadline($file)
if $line="" then exitloop
_FileWriteToLine("fichier.pl", 5, "if ($_ =~ m/" & $line & "/) {",1)
RunWait("perl fichier.pl",@WorkingDir)
WEnd
fileclose($file)il est possible de convertir la liste en tableau, ce qui évite ce genre de contraintes :
Code : Tout sélectionner
#include <file.au3>
#include <array.au3>
global $myarray
_filereadtoarray("recherche.txt", $myarray)
for $i = 1 to ubound($myarray)-1
if $myarray[$i]<>"" Then
_FileWriteToLine("fichier.pl", 5, "if ($_ =~ m/" & $myarray[$i] & "/) {",1)
RunWait("perl fichier.pl",@WorkingDir)
EndIf
NextA la fin du traitement, uniquement les lignes contenant les expressions qui t'intéressent seront recopiées dans le nouveau fichier RESULTAT.txt. Attention, pour chaque nouvelle exécution, il faudra d'abord détruire le fichier RESULTAT.txt, sinon il sera automatiquement incrémenté.
Edit. après réflexion, je crois que l'épuration du fichier log lui même n'était pas le but recherché, uniquement le tri de tous les fichiers logs contenus dans le dossier.
SEISHIRO, pourrais tu confirmer que le but de la manœuvre est d'épurer 1 log, et non pas d'épurer un dossier contenant plusieurs logs ?
S'il s'agit d'épurer 1 seul log, pourrais tu en copier quelques lignes pour en voir la structure ?
Modifié en dernier par Tlem le mar. 21 juil. 2009 14:08, modifié 1 fois.
Raison : Suppression balise Autoit (réservée à d'autres forum)
Raison : Suppression balise Autoit (réservée à d'autres forum)
Re: [..] Script pour "nettoyer" des fichiers logs
Bonjour,
Désolé pour cette absence.
Effectivement il s'agit bien d'un répertoire dans lequel épurer plusieurs logs.
Merci.
Désolé pour cette absence.
Effectivement il s'agit bien d'un répertoire dans lequel épurer plusieurs logs.
Merci.

