web-dev-qa-db-fra.com

Consigner l'erreur du script dans un fichier avec la date et l'heure

Je peux utiliser 2> errorLogFile pour consigner l'erreur d'exécution du script dans un fichier, n'est-ce pas? Ma question est de savoir comment enregistrer la date et l'heure de l'erreur avec l'erreur?

par exemple:

$ cat myScript
2> errorLogFile
..... # rest of the script

voici à quoi devrait ressembler le fichier d'erreur:

$ cat errorLogFile
21 Nov 2015 2:00 PM some error happened
3
Edward Torvalds

Vous pouvez rediriger stderr vers un processus de substitution qui traite stderr et génère les lignes traitées dans le journal.

Par exemple, ce script imprime 5 lignes sur stdout et 5 lignes sur stderr, redirigeant stderr vers un processus de substitution qui traite stderr et affiche les lignes traitées dans un fichier. nommé "log" dans le répertoire de travail en cours (sachez que la syntaxe de redirection stderr est _exec 2> [...]_, et non _2> [...]_):

_#!/bin/bash
exec 2> >(Perl -pe '$x=`date "+%d %b %Y %H:%M %p"`;chomp($x);$_=$x." ".$_' >log)
for i in {1..5}; do
    sleep 1
    echo "STDOUT message #$i"
    echo "STDERR message #$i" >&2
done
exit 0
_

La substitution de processus appelle Perl, qui ajoute la date et l'heure actuelles dans ce format à chaque ligne et les envoie dans un fichier nommé "log" dans le répertoire de travail en cours.

_% bash script.sh
STDOUT message #1
STDOUT message #2
STDOUT message #3
STDOUT message #4
STDOUT message #5
% cat log
02 Nov 2015 20:15 PM STDERR message #1
02 Nov 2015 20:15 PM STDERR message #2
02 Nov 2015 20:15 PM STDERR message #3
02 Nov 2015 20:15 PM STDERR message #4
02 Nov 2015 20:15 PM STDERR message #5
_
0
kos