linux bash -禁用日志文件的最佳优雅方式

ycggw6v2  于 2023-08-03  发布在  Linux
关注(0)|答案(5)|浏览(107)

下面的代码是我的bash脚本中日志文件的基本概念:

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"

字符串
这段代码帮助我理解了bash脚本中的每一步,并对每一步进行了故障排除,但有时候我想禁用日志创建,因为我们不需要它们,我想让脚本更高效(在脚本中的每一行上调用日志函数需要时间,并且会使脚本更繁重)。
所以我的问题是:
禁用日志文件的最佳方法是什么?
到目前为止,我已经通过在log函数内部返回来禁用log函数,但是这个解决方案并不好,因为我仍然调用该函数。

svdrlsy4

svdrlsy41#

有些人希望在每次调用日志函数时插入一个条件检查:

function log {
   if <not disabled>; then
       <show message>
   fi
}

字符串
像我这样的一些人更喜欢删除函数的任何操作:

function log {
    :
}


这就是我在logging function中所做的。

brqmpdu1

brqmpdu12#

您可以将$LOG变量设置为/dev/null,这将导致日志不会被保存到文件中。

LOG_DISABLE=FALSE
if [[ $LOG_DISABLE = "TRUE" ]]; then
    LOG=/dev/null
fi

字符串
/dev/null非常快,所以我不认为这会比你提前从函数返回的解决方案有任何重大的性能缺点。

f3temu5u

f3temu5u3#

您可以使用一些文件描述符重定向:

#!/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

ljsrvy3e

ljsrvy3e4#

我的方式:

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是一个快速的内置函数;)

zf9nrax1

zf9nrax15#

我有智能解决方案来禁用日志文件
例如,

unset  -f  MY_LOG
   shopt -s expand_aliases
   alias MY_LOG=true

字符串
命令unset禁用MY_LOG功能
我在true命令中添加别名MY_LOG
意思是MY_LOG会激活的时候,实际上它会激活true命令,而true命令并不真正做任何事情

相关问题