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

时间:2014-06-03 06:41:08

标签: linux bash sh solaris ksh

亲爱的朋友和学院

以下代码是我的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"

5 个答案:

答案 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 命令不会真正执行任何