dear friends and colleges
the following code , is the basic concept of my log file in my bash script
this Code help me to understand each step in my bash script or in case we need to make troubleshooting
but some times I want to disable the Log creation because we not need the log and want to make the script more efficiency ( call to Log function each line in the script take time and make the script more heavy )
so my question my friends:
What the best elegant way to disable the log file?
Until now I disabled the log function by return inside my log function
But this solution not so good because I still call the function
LOG=/tmp/BACKUP_PROCCESS.log
LOG_DISABLE=FALSE
MY_LOG ()
{
[ $LOG_DISABLE = TRUE ] && return
echo "[`date +%d"/"%b"/"%G"-"%T`] INFO $1" >> $LOG
}
MY_LOG "START TO BACKUP FILES UNDER /VAR/LOG"
Some would want to insert a condition checking everytime the logging function is called:
function log {
if <not disabled>; then
<show message>
fi
}
And some like me would prefer removing any action to the function:
function log {
:
}
This is what I do in my logging function.
You could set your $LOG
variable to /dev/null
, which would cause the logs to go nowhere instead of into a file.
LOG_DISABLE=FALSE
if [[ $LOG_DISABLE = "TRUE" ]]; then
LOG=/dev/null
fi
/dev/null
is very fast so I wouldn't expect this to have any major performance disadvantages over your solution of returning from the function early.
You can use some file descriptor redirections:
#!/bin/sh
log()
{
echo >&3 $@
}
# Redirect all fd 3 in the file test.log
exec 3>$HOME/test.log
log this should be print
# Redirect all fd 3 in /dev/null
exec 3>/dev/null
log this sould not be print
and you will have in the file test.log
this should be print
My way:
LOG_DISABLE="FALSE"
if [ $LOG_DISABLE = "TRUE" ]; then
MY_LOG(){
true
}
else
MY_LOG(){
echo "[`date +%d"/"%b"/"%G"-"%T`] INFO $1" >> $LOG
}
fi
Just defining the function differently based on the flag.
You will call the function either way but I hope true is a quick builtin ;)
I have smart solution to disable the log file
example ,
unset -f MY_LOG
shopt -s expand_aliases
alias MY_LOG=true
the command unset disable the MY_LOG function
and I add alias MY_LOG to true command
the meaning of that is very time when MY_LOG will activate, actually it will activate the true command , and true command not really do anything