以下代码是我的bash脚本中日志文件的基本概念
此代码帮助我理解我的bash脚本中的每个步骤,或者我们需要进行故障排除
但有时我想禁用日志创建,因为我们不需要日志并希望使脚本更有效率(调用Log函数,脚本中的每一行都需要时间并使脚本更加繁重)
所以我的问题是我的朋友们:
禁用日志文件的最佳方式是什么?
到目前为止,我通过在日志函数
中返回来禁用日志功能但是这个解决方案不太好,因为我仍然调用函数
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"
答案 0 :(得分:2)
有些人希望每次调用日志记录函数时都插入条件检查:
function log {
if <not disabled>; then
<show message>
fi
}
像我这样的人更愿意删除对该功能的任何动作:
function log {
:
}
这就是我在logging function中所做的。
答案 1 :(得分:1)
您可以将$LOG
变量设置为/dev/null
,这会导致日志无处可去而不是文件。
LOG_DISABLE=FALSE
if [[ $LOG_DISABLE = "TRUE" ]]; then
LOG=/dev/null
fi
/dev/null
非常快,所以我不希望这会比你早期从函数返回的解决方案有任何重大的性能劣势。
答案 2 :(得分:1)
您可以使用一些文件描述符重定向:
#!/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
您将在文件test.log
this should be print
答案 3 :(得分:0)
我的方式:
LOG_DISABLE="FALSE"
if [ $LOG_DISABLE = "TRUE" ]; then
MY_LOG(){
true
}
else
MY_LOG(){
echo "[`date +%d"/"%b"/"%G"-"%T`] INFO $1" >> $LOG
}
fi
仅根据标志定义不同的功能。 您将以任一方式调用该函数,但我希望true是快速内置的;)
答案 4 :(得分:0)
我有智能解决方案来禁用日志文件
例如,
unset -f MY_LOG
shopt -s expand_aliases
alias MY_LOG=true
命令取消设置禁用 MY_LOG 功能
我将别名 MY_LOG 添加到 true 命令
这意味着 MY_LOG 会激活,实际上它会激活 true 命令, true 命令不会真正执行任何