vimer linux kernel 爱好者

在shell脚本中使用log

2022-01-08

shell脚本中为什么使用log

大家想一想,当你写的代码在遇到一些不明所以的问题时,如何快速的debug呢? GDB是一方面,但是不怎么友好对使用者来说?那还有没有其他的方式呢?

有的,就是log。我们应该把自己写的程序跑过的一些东西,以log的形式保存在 一个特殊的位置,大部分发行版中,大部分位置是 /var/log,也就是如果你确实 找不到一个合适的位置来放置log,那么,这个位置绝对没有问题。

C/C++或者java python等这种强编译型的语言有日志文件比较常见,但是shell也 有log,不知道你之前是否能想到。

link

下面的代码主要参考这个link。

cat logger.sh

sudo chown $USER:$USER -R /var/log
SCRIPT_LOG=/var/log/SystemOut.log
touch $SCRIPT_LOG
sudo chown $USER:$USER $SCRIPT_LOG

function SCRIPTENTRY(){
 timeAndDate=`date`
 script_name=`basename "$0"`
 script_name="${script_name%.*}"
 echo "[$timeAndDate] [DEBUG]  > $script_name $FUNCNAME" >> $SCRIPT_LOG
}

function SCRIPTEXIT(){
 script_name=`basename "$0"`
 script_name="${script_name%.*}"
 echo "[$timeAndDate] [DEBUG]  < $script_name $FUNCNAME" >> $SCRIPT_LOG
}

function ENTRY(){
 local cfn="${FUNCNAME[1]}"
 timeAndDate=`date`
 echo "[$timeAndDate] [DEBUG]  > $cfn $FUNCNAME" >> $SCRIPT_LOG
}

function EXIT(){
 local cfn="${FUNCNAME[1]}"
 timeAndDate=`date`
 echo "[$timeAndDate] [DEBUG]  < $cfn $FUNCNAME" >> $SCRIPT_LOG
}


function INFO(){
 local function_name="${FUNCNAME[1]}"
    local msg="$1"
    timeAndDate=`date`
    echo "[$timeAndDate] [INFO]  $msg" >> $SCRIPT_LOG
}


function DEBUG(){
 local function_name="${FUNCNAME[1]}"
    local msg="$1"
    timeAndDate=`date`
 echo "[$timeAndDate] [DEBUG]  $msg" >> $SCRIPT_LOG
}

function ERROR(){
 local function_name="${FUNCNAME[1]}"
    local msg="$1"
    timeAndDate=`date`
    echo "[$timeAndDate] [ERROR]  $msg" >> $SCRIPT_LOG
}

cat test_logger.sh

#!/bin/sh

source ./logger.sh
SCRIPTENTRY
updateUserDetails(){
    ENTRY
    DEBUG "Username: $1, Key: $2"
    INFO "User details updated for $1"
    EXIT
}

INFO "Updating user details..."
updateUserDetails "cubicrace" "3445"

rc=2

if [ ! "$rc" = "0" ]
then
    ERROR "Failed to update user details. RC=$rc"
fi
SCRIPTEXIT

下面是详细的测试log:

vimer@user-HP:/var/log$ cat SystemOut.log
[2022年 01月 08日 星期六 21:17:23 CST] [DEBUG]  > test_logger SCRIPTENTRY
[2022年 01月 08日 星期六 21:17:23 CST] [INFO]  Updating user details...
[2022年 01月 08日 星期六 21:17:23 CST] [DEBUG]  > updateUserDetails ENTRY
[2022年 01月 08日 星期六 21:17:23 CST] [DEBUG]  Username: cubicrace, Key: 3445
[2022年 01月 08日 星期六 21:17:23 CST] [INFO]  User details updated for cubicrace
[2022年 01月 08日 星期六 21:17:23 CST] [DEBUG]  < updateUserDetails EXIT
[2022年 01月 08日 星期六 21:17:23 CST] [ERROR]  Failed to update user details. RC=2
[2022年 01月 08日 星期六 21:17:23 CST] [DEBUG]  < test_logger SCRIPTEXIT
[2022年 01月 08日 星期六 21:17:57 CST] [DEBUG]  > test_logger SCRIPTENTRY
[2022年 01月 08日 星期六 21:17:57 CST] [INFO]  Updating user details...
[2022年 01月 08日 星期六 21:17:57 CST] [DEBUG]  > updateUserDetails ENTRY
[2022年 01月 08日 星期六 21:17:57 CST] [DEBUG]  Username: cubicrace, Key: 3445
[2022年 01月 08日 星期六 21:17:57 CST] [INFO]  User details updated for cubicrace
[2022年 01月 08日 星期六 21:17:57 CST] [DEBUG]  < updateUserDetails EXIT
[2022年 01月 08日 星期六 21:17:57 CST] [ERROR]  Failed to update user details. RC=2
[2022年 01月 08日 星期六 21:17:57 CST] [DEBUG]  < test_logger SCRIPTEXIT

下一篇 如何学习编程

Comments

Content