|
Écrit par Flashx
|
|
Les traitements shells nécessitent souvent de tracer les compte-rendus dans un fichier de trace.
Voici deux petites fonctions très utiles qui permettront de le faire en choisissant votre niveau de trace ainsi qu'un exemple d'utilisation
 Le fichier Trace_Lib.sh -->
Déclaration des variables de niveau de trace
#!/usr/bin/ksh
export LOG_CRITIQUE=5
export LOG_ERREUR=4
export LOG_WARNING=3
export LOG_NORMAL=2
export LOG_DEBUG=1
Â
export LOG_LABELS[$LOG_CRITIQUE]=C
export LOG_LABELS[$LOG_ERREUR]=E
export LOG_LABELS[$LOG_WARNING]=W
export LOG_LABELS[$LOG_NORMAL]=N
export LOG_LABELS[$LOG_DEBUG]=D
Â
export LOG_LEVEL=${LOG_LEVEL:-$LOG_NORMAL}
| Fonction de trace |
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
|
function fEcritLog
{
lv_Mess="$1"
typeset -i lv_NivMess
if [[ "$2" = "" ]]; then
lv_NivMess=$LOG_NORMAL
else
lv_NivMess=$2
fi
Â
# Variables
typeset -R7 lv_nPID=$$
typeset -L30 lv_Script=${sv_NomScript:-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
Â
# Verification du niveau
if [[ $lv_NivMess -lt $LOG_DEBUG ]]; then
lv_NivMess=$LOG_DEBUG
elif [[ $lv_NivMess -gt $LOG_CRITIQUE ]]; then
lv_NivMess=$LOG_CRITIQUE
fi
Â
# On ne trace que les messages avec un niveau superieur au niveau de trace
if [[ $lv_NivMess -lt ${LOG_LEVEL} ]]; then return 0; fi
Â
# Calcul type en fonction du niveau
lv_TypeMess=${LOG_LABELS[$lv_NivMess]}
Â
# Ecriture
echo "$lv_Mess" | while read lv_Ligne
do
echo "$(date +'%H:%M:%S') ${lv_nPID} ${lv_Script} ${lv_TypeMess} ${lv_Ligne}" | tee -a ${sv_LOGFILE}
done
}
#------------------------- Fin de la fonction fEcritLog ------------------------
#----------------------------------------------------------------------------
|
Â
| Une fonction qui écrit toute les lignes d'un fichier de trace dans le fichier de trace principal |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#------------------------ Debut de la fonction fEcritFicLog -----------------------
# Ecriture dans la log d'un fichier (plusieurs lignes)
# Argument 1 : nom du fichier
# Argument 2 : niveau de trace
function fEcritFicLog
{
typeset lv_Fic="$1"
typeset lv_Ligne
if [[ ! -r ${lv_Fic} ]]; then
fEcritLog "Fichier ${lv_Fic} inexistant" "$2"
else
cat ${lv_Fic} | while read lv_Ligne
do
fEcritLog "> ${lv_Ligne}" "$2"
done
fi
}
#------------------------- Fin de la fonction fEcritFicLog ------------------------
|
 Fin de la bibliothèque de fonction de trace --
Utilisation des fonctions dans un script -->
| Exemple d'utilisation |
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
export sv_NomScript='GestionUnix.sh'
export sv_LOGFILE=`pwd`'/TRACE_${sv_NomScript}_'`date +"%Y%m%d_%H%M"`'.log'
Â
#
# Déclaration des tableaux contenant les répertoires à créer
DIR_APP[0]="env"
DIR_APP[1]="ksh"
DIR_APP[2]="sql"
DIR_APP[3]="tmp"
typeset -i NB_APP=4
Â
DIR_CFT[0]="data/in"
DIR_CFT[1]="data/out"
DIR_CFT[2]="data/err"
DIR_CFT[3]="data/log"
DIR_CFT[4]="data/arch"
typeset -i NB_CFT=5
Â
DIR_NAS[0]="/shr"
typeset -i NB_NAS=1
Â
#
# Appel de la bibliothèque de fonctions à utiliser
. PWC_ENV_Lib.sh
Â
fEcritLog " "
fEcritLog "------------------------------------------------------------"
fEcritLog "--- Gestion de l'environnement Unix - DEBUT ---"
fEcritLog "------------------------------------------------------------"
fEcritLog " "
Â
# Contrôle des paramètres passés en arguments
if [[ $# != 6 ]]
then
fEcritLog "Nombre de parametres passes en arguments insuffisant : $#" $LOG_ERREUR
return 99
fi
lv_uenv=$1
lv_env=$2
lv_app=$3
lv_ENV=$4
lv_APP=$5
lv_DIRPATH=$6
Â
#
#
# Controle du user unix qui doit lancer le script
lv_runusr=$(whoami)
lv_envusr=et${lv_env}${lv_app}
Â
if [[ ${lv_runusr} != ${lv_envusr} ]]
then
fEcritLog "Le user unix utilisé pour lancer le script n'est pas le bon : " $LOG_ERREUR
fEcritLog "$lv_runusr au lieu de $lv_envusr." $LOG_ERREUR
fEcritLog "Connectez vous en tant que $lv_envusr et relancer le script avec les paramètres saisis" $LOG_ERREUR
sleep 3
return 99
fi
Â
#
# Sauvegarde du .profile existant
mv /home/et${lv_env}${lv_app}/.profile /home/et${lv_env}${lv_app}/profile.`date +"%Y%m%d%H%M"`
if [[$? !=0 ]]
then
fEcritLog "Sauvegarde du fichier .profile du user Unix en erreur" 4
return 99
else
fEcritLog "Sauvegarde du fichier .profile du user Unix effectuee"
fi
#
# Copie du fichier modèle en .profile
cp ${lv_DIRPATH}/PWC_ENV_ProfileModel.txt /home/et${lv_env}${lv_app}/profile.tmp
if [[$? !=0 ]]
then
fEcritLog "Copie du fichier modèle PWC_ENV_ProfileModel.txt en erreur" 4
return 99
else
fEcritLog "Copie du nouveau fichier .profile du user Unix effectuee"
fi
|
Â
La fonction fEcritLog prend deux paramètres : Le texte à logguer et le niveau de log de ce texte. Par défaut le niveau de trace est placé à Normal. Donc il est possible de spécifier dans les scripts de traitements des messages de type DEBUG qui ne seront loggués dans le fichier de trace que si le niveau de log minimum est modifié.
Pour modifier ce niveau de log minimum : il faut modifier dans la bibliothèque Trace_Lib.sh les lignes suivantes :Â
export LOG_LEVEL=${LOG_LEVEL:-$LOG_NORMAL}
Â
|
|
Mis à jour ( Lundi, 24 Août 2009 10:39 )
|