当前位置: 首页 > 工具软件 > OpenSupports > 使用案例 >

linux 脚本 日志文件,在linux下用脚本输出日志

闻人花蜂
2023-12-01

在用脚本实现模块功能时,往往涉及到日志功能,希望要实现的效果是用一个 write_log 命令,给一条出错消息作为输入,write_log 记录日志时自动加上日志级别、时间戳、脚本文件名和行号。形如:

[INFO] 2012-06-26 16:12:50 do_log @[test_log.sh:4]

时间戳、脚本文件名都比较容易获取,但是行号就有点麻烦。shell 中的 $LINENO 变量只能展开成当前行的行号,如果把 write_log 实现成函数的话,那么在函数使用 $LINENO,只能展开为函数体所在的行号,这不是我们所需要的。

这里可以用到linux系统下给命令指定别名alias命令,可以解决这一问题。

#! /bin/sh

function write_log()

{

local LOG_LEVEL=$1

local LOCATION=$2

local LOG_FILE=$3

local MESSAGE=$4

echo [$LOG_LEVEL] `date +%F" "%H:%M:%S` $MESSAGE @[$LOCATION] >>$LOG_FILE

}

# 这里只实现4个级别的日志

alias log_debug='write_log "DBG" "$0:$LINENO" my_log.log'

alias log_info='write_log "INF"  "$0:$LINENO" my_log.log'

alias log_warn='write_log "WRN" "$0:$LINENO" my_log.log'

alias log_err='write_log "ERR" "$0:$LINENO" my_log.log'

然后只要使用命令 log_err 或者 log_debug 等命令输出日志即可,如使用

log_err "an error occur" 则可以在my_log.log 文件中得到形如以下的信息

[ERR] 2012-06-26 16:26:56 an error occur @[test_log.sh:4]

特别注意: 使用该功能的需要在脚本开头写上 #! /bin/sh 或者 #! /bin/bash --posix

 类似资料: