Josue Kouka

Josue Kouka

Code, Linux, and open source — one post at a time.

25 Feb 2015

Exemple de custom Logger en shell

Hello guys !!! (Imaginez moi avec une tete requin en train de crier comme un fou :D)

Pour un de mes scripts shell j’avais besoin d’une sorte de logger. Et me suis demandé comment avoir une sorte de module de logging pour mes scripts shell, et j’en ai écris un.

Structure et Installation

Creer un dossier qui contiendra le module i.e:

yosuke@loking$> mkdir .scripts

Dans votre fichier de profile (.bashrc, .profile)

export MYSCRIPTS=$HOME/.scripts
source $MYSCRIPST/mylogger.sh

Le source permet a bash de charger votre script lorsque vous lancez votre shell.

Code de votre Shell Logger

## If a LOG_OUTPUT variable is defined,
## the logger will write to a file pointed to by the variable

function _log(){
    level=$1
    message=$2
    output=$3

    if [ -z $output ]; then
        if [ `uname -s` != "Darwin" ]; then
            logger -s -i -t "[`date +'%Y-%m-%d %H:%M:%S'` ${HOSTNAME} ${USER}][`echo ${level} | tr '[:lower:]' '[:upper:]'`]" -p "user.${level}" "${message}" 2>&1
        else
            logger -s -p "user.${level}" "${message}" 2>&1
        fi
    else
         if [ `uname -s` != "Darwin" ]; then
            logger -s -i -t "[`date +'%Y-%m-%d %H:%M:%S'` ${HOSTNAME} ${USER}][`echo ${level} | tr '[:lower:]' '[:upper:]'`]" -p "user.${level}" "${message}" 2>> $output 
        else
            logger -s -p "user.${level}" "${message}" 2>> $output
        fi
    fi
}

function _process(){
    level=$1
    message=$2

    if [ ! "${message}" == "" ]; then
        _log "${level}" "${message}" $LOG_OUTPUT
    else
        echo -e "A message must be provided i.e : _${level} 'your message'"
    fi
}

function _info(){
    _process "info" "$1"
}

function _debug(){
    _process "debug" "$1"
}

function _warning(){
    _process "warning" "$1"
}

function _error(){
    _process "error" "$1"
}

function _notice(){
    _process "notice" "$1"
}

export -f _log
export -f _process
export -f _info
export -f _debug
export -f _warning
export -f _error
export -f _notice

HELP:

  • export -f permet d’exporter une fonction bash et la rend accessible a bash et tous les processus fils de bash. Ce qui permet a ces differentes fonctions d’etre utilisées dans un script bash.

    If a LOG_OUTPUT variable is defined,

Un test rapide dans votre shell

yosuke@loking$> _info "Hello josh"
[2015-03-05 09:44:29 loking yosuke][INFO][24044]: Hello josh    

Pour rediriger la sortie log vers un fichier

yosuke@loking$> LOG_OUTPUT=myfile.log
yosuke@loking$> _debug "Hello josh"
yosuke@loking$> cat myfile.log
[2015-03-05 09:44:29 loking yosuke][DEBUG][24044]: Hello josh

Voila !!!

## the logger will write to a file pointed to by the variable

Si vous trouvez des ameliorations n’hesitez pas a forker ce repo et a m’envoyer un pull request.

Merci