J'ai un script en cours d'exécution que je sortie dans un fichier journal:
script.sh >> /var/log/logfile
J'aimerais ajouter un horodatage avant chaque ligne ajoutée au journal. Comme:
Sat Sep 10 21:33:06 UTC 2011 The server has booted up. Hmmph.
Y a-t-il un jujitsu que je peux utiliser?
Réponses:
Vous pouvez diriger la sortie du script via une boucle qui préfixe la date et l'heure actuelles:
Si vous l'utilisez souvent, il est facile de créer une fonction bash pour gérer la boucle:
la source
read
de rogner les espaces au début et à la fin de la ligne. Il définit IFS (le séparateur de champs interne de bash, essentiellement une liste de caractères d'espacement) à vide pour laread
commande.echo
interprétant des séquences d'échappement. Si vous voulez vraiment que le contenu ne soit pas gâché (autre que l'ajout de dates), remplacez laecho
commande parprintf "%s %s\n" "$(date)" "$line"
date -u +"%Y-%m-%dT%H:%M:%SZ"
ou peut-être plus joliedate +"%Y-%m-%d %T"
.date
) pour chaque ligne de journal, ce qui peut constituer un inconvénient majeur en fonction de votre ordinateur et du nombre de journaux. Je préférerais plutôt utiliser,ts
si disponible, voir la réponse de @willemVoir
ts
lemoreutils
paquet Ubuntu :Ou, si
$command
la mise en mémoire tampon automatique (expect-dev
package requis):la source
La commande date fournira cette information
afin que vous puissiez
c'est ce que tu voulais?
la source
Vous pouvez simplement faire écho aux sorties de commande dans le fichier journal. c'est à dire,
Ça marche vraiment :)
Exemple:
la source
Faire un
config.sh
fichierLorsque vous devez envoyer à utiliser le fichier journal
Le fichier journal ressemblera à
Il sera donc facile de trier par date
la source
Tu veux dire comme:
la source
script.sh
. Le PO nécessite un horodatage par ligne.Essaye ça
Appelez cette fonction d'horodatage dans chaque commande echo:
la source
La réponse acceptée https://serverfault.com/a/310104 peut être un peu lente s'il faut traiter un grand nombre de lignes, le temps système nécessaire au démarrage du
date
processus autorisant environ 50 lignes par seconde sous Ubuntu et seulement 10 environ. -20 dans Cygwin.Quand
bash
peut être supposé une alternative plus rapide serait leprintf
construit avec son%(...)T
spécificateur de format. Comparerla source
Vous remarquerez peut-être que awk court vite,
Mais Sed court beaucoup plus vite.
Cependant, à y regarder de plus près, l’ensemble ne semble pas changer de temps,
la source
"s/^/$(date -R) /"
et une date d’exécution une fois avant sed Sed reçoit une chaîne statique.yes | head -5000000 | while read line; do echo $((SECONDS)); done | uniq -c
ce qui est beaucoup plus lent que gawk.ts
l'utilitaire a des performances similaires à celles de la boucle bash.yes |head -5000000 |perl -ne 'print localtime."\t".$_' |uniq -c
ce qui est légèrement plus lent que awk.Ci-dessous le contenu de mon fichier journal
une partie de mon contenu est comme ci-dessous
la source
Ce script imprime la sortie dans le terminal et enregistre également dans le fichier journal.
Exemple de sortie:
la source
Une autre option consiste à configurer une fonction à appeler chaque fois que vous souhaitez générer des données dans votre code:
Ensuite, chaque fois dans votre code, vous voulez l'envoyer à l'appel du fichier journal
Peasy facile....
la source
Pipe a "sed":
la source