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é.
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}