#!/bin/bash
LOG_FILE="/var/log/test.log"
>"${LOG_FILE}"
exec &>>${LOG_FILE}
set -x
第一行是定义日志绝对路径
第二行是先清空日志文件内容
第三行是把当前脚本的标准输出,标准错误输出都重定向到文件LOG_FILE中
第四行是打印每一行shell命令执行
exec是用被执行的命令行替换掉当前的shell进程,且exec命令后的其他命令将不再执行。例如在当前shell中执行exec ls表示执行ls这条命令来替换当前的shell即为执行完后会退出当前shell。但是当exec命令对文件描述符操作的时候,就不会替换shell,而是操作完成后还会继续执行后面的命令。例如第三行,在这里&>>LOG_FILE意思是把标准输出,标准错误输出都重定向到文件LOG_FILE中。
一般只需要在脚本前面加上这几行就可以了,日志内容就是脚本执行命令的全部过程和标准输出,标准错误输出内容。我们也可以自定义自己的打印函数:
#!/bin/bash
LOG_FILE="/var/log/test.log"
exec 2>>${LOG_FILE}
function my_log()
{
local curtime=`date "+%Y-%m-%d %H:%M:%S"`
echo "$curtime $*">> ${LOG_FILE}
}
main()
{
my_log "hello world"
}
main "$@"
可以看到我们开始先把标准错误输出都重定向到文件LOG_FILE中,我们自定义的打印函数前面会带上当前时间戳。