Skip to content

Instantly share code, notes, and snippets.

@benahm
Created February 8, 2014 00:51
Show Gist options
  • Save benahm/8874964 to your computer and use it in GitHub Desktop.
Save benahm/8874964 to your computer and use it in GitHub Desktop.
log.sh
#!/bin/bash
LOG_FILE_NAME='MyLogFile'
LOG_FILE_PATH='../log/'
LOG_LEVEL='3' # DEBUG=4 INFO=3 WARN=2 ERR=1 NONE=0
LOG_OUTPUT='2' # STDOUT=1 FILE=2 BOTH=3
_log_level_string=( DEBUG INFO WARN ERR NONE )
_log_output_string=( STDOUT FILE BOTH )
_default_log_path='../log'
_default_log_file="${LOG_FILE_NAME}_$( date +'%Y%m%d%H%M' ).log"
LOG_LEVEL_DEBUG=4
LOG_LEVEL_INFO=3
LOG_LEVEL_WARN=2
LOG_LEVEL_ERR=1
LOG_LEVEL_NONE=0
LOG_LEVEL=${LOG_LEVEL-$LOG_LEVEL_INFO}
LOG_DATE_FORMAT=${LOG_DATE_FORMAT-"%Y/%m/%d %H:%M:%S"}
LOG_FILE=${LOG_FILE-$_default_log_file}
LOG_PATH=${LOG_PATH-$_default_log_path}
LOG_OUTPUT_STDOUT=1
LOG_OUTPUT_FILE=2
LOG_OUTPUT_BOTH=3
LOG_OUTPUT=$LOG_OUTPUT
function _log() {
local msg="$( date +"$LOG_DATE_FORMAT" ) $*"
case $LOG_OUTPUT in
$LOG_OUTPUT_STDOUT)
echo $msg;;
$LOG_OUTPUT_FILE)
CHECK_LOG_PATH
echo $msg >> $LOG_PATH'/'$LOG_FILE;;
$LOG_OUTPUT_BOTH)
CHECK_LOG_PATH
echo $msg | tee -a $LOG_PATH'/'$LOG_FILE;;
esac
}
function LOG_DEBUG() {
if [ $LOG_LEVEL_DEBUG -le $LOG_LEVEL ]; then
_log "DEBUG" $*
fi
}
function LOG_INFO() {
if [ $LOG_LEVEL_INFO -le $LOG_LEVEL ]; then
_log "INFO" $*
fi
}
function LOG_WARN() {
if [ $LOG_LEVEL_WARN -le $LOG_LEVEL ]; then
_log "WARN" $*
fi
}
function LOG_ERR() {
if [ $LOG_LEVEL_ERR -le $LOG_LEVEL ]; then
_log "ERROR" $*
fi
}
function SET_LOG_LEVEL() {
local level=$LOG_LEVEL
case "$level" in
4)
LOG_LEVEL=$LOG_LEVEL_DEBUG
;;
3)
LOG_LEVEL=$LOG_LEVEL_INFO
;;
2)
LOG_LEVEL=$LOG_LEVEL_WARN
;;
1)
LOG_LEVEL=$LOG_LEVEL_ERR
;;
0)
LOG_LEVEL=$LOG_LEVEL_NONE
;;
*)
echo "LOG error: Invalid log level (${level}). Valid levels are ${_log_level_string[@]}."
exit 1
;;
esac
}
function CHECK_LOG_PATH() {
if [ ! -d $LOG_PATH ]; then
mkdir $LOG_PATH
fi
}
function LOG_LEVEL_STRING() {
local ind=$(( $1 - 1 )); echo ${_log_level_string[$ind]}
}
function LOG_OUTPUT_STRING() {
local ind=$(( $1 - 1 )); echo ${_log_output_string[$ind]}
}
function LOG_INFORMATION() {
echo "LOG"
echo ">>> LOG_LEVEL = $( LOG_LEVEL_STRING $LOG_LEVEL )"
echo ">>> LOG_OUTPUT = $( LOG_OUTPUT_STRING $LOG_OUTPUT )"
echo ">>> LOG_FILE = $LOG_PATH/$LOG_FILE"
echo
}
SET_LOG_LEVEL
echo $LOG_LEVEL
LOG_INFORMATION
LOG_INFO 'test'
LOG_WARN 'test'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment