#!/bin/bash cd "$(dirname "$(readlink -f "$0")")" G_DIR="../log" LOG_DIR=${G_DIR} # Help function function help() { echo -e "Usage: \n\t$(basename "$0") {-t|-d|-i|-w|-e|-f}\n" echo -e " \t$(basename "$0") [-t|-d|-i|-w|-e|-f] program_name \n" echo -e "\t -t|-v : \t Extract lines with [T]race level: 6 " echo -e "\t -d : \t Extract lines with [D]ebug level: 5 " echo -e "\t -i : \t Extract lines with [I]nfo level: 4 " echo -e "\t -w : \t Extract lines with [W]arn level: 3 " echo -e "\t -e : \t Extract lines with [E]rror level: 2 " echo -e "\t -c|-f : \t Extract lines with [C]ritical(Fault) 1 " echo -e "\t -err : \t Extract lines with [E]rror level: 2 for error.log" echo -e "\t -clear: \t Clear the log file for the specified program, but Reverse error.log" echo -e "\t -g : \t Get log level:\t manage logic tcpcomm uartcomm ..." echo -e "\t -s : \t Set log level x: [1-C, 2-E, 3-W, 4-I, 5-D, 6-T] " echo -e "" } # Clear log file function function clear_log() { local program_name=$1 log_file="${LOG_DIR}/$program_name/$program_name.log" log_err_file="${LOG_DIR}/$program_name/${program_name}_error.log" if [ -f "$log_file" ]; then > "$log_file" echo "Log file for $program_name cleared." # > "$log_err_file" # echo "Log file for ${program_name}_error cleared." else echo "Log file for $program_name does not exist." fi } # Extract log function function extract_log() { local level=$1 local program_name=$2 #log_file="${LOG_DIR}/$program_name/$program_name.log" log_file="$(ls -t ${LOG_DIR}/$program_name/${program_name}*.log|head -n1)" log_err_file="$(ls -t ${LOG_DIR}/$program_name/${program_name}_error.log|head -n1)" if [ -f "$log_file" ]; then case "$level" in T|t|Trace|trace|V|v|Verbose|verbose) tail -f "$log_file" #| grep -E "\[T|Trace\]" ;; D|d|Debug|debug) tail -f "$log_file" | grep -vE "\[T|Trace\]" #| grep -E "\[D|Debug\]" ;; I|i|Info|info) tail -f "$log_file" | grep -vE "\[T|Trace\]|\[D|Debug\]" # | grep -E "\[I|Info\]" ;; W|w|Warn|warn) tail -f "$log_file" | grep -vE "\[T|Trace\]|\[D|Debug\]|\[I|Info\]" # | grep -E "\[W|Warn\]" ;; E|e|Error) tail -f "$log_file" | grep -vE "\[T|Trace\]|\[D|Debug\]|\[I|Info\]|\[W|Warn\]" # | grep -E "\[E|Error\]" ;; err|error) tail -f "$log_err_file" ;; C|c|Critical|critical|F|f|Fault|fault) tail -f "$log_file" | grep -E "\[C|Critical\]" ;; *) help exit 1 ;; esac else echo "Log file for $program_name does not exist." fi } # Extract log function function level_log() { local cmd=$1 local program_name=$2 local level=$3 log_file="${LOG_DIR}/$program_name/$program_name.log" lv_file="/tmp/prlog/level/$program_name" # if [[ "${BASH_VERSINFO:-0}" -lt 4 ]]; then echo "此脚本需要 Bash 4.0 或更高版本" >&2 # exit 1 fi # 声明一个关联数组 declare -A my_array # 给数组赋值 my_array[0]="Off" my_array[1]="Critical" my_array[2]="Error" my_array[3]="Warn" my_array[4]="Info" my_array[5]="Debug" my_array[6]="Trace" if [ -f "$log_file" ]; then case "$cmd" in Get) level="`cat ${lv_file}`" #| grep -E "\[T|Trace\]" strLv=${my_array[${level}]} echo "get level ${level}: [${strLv:0:1}] [${strLv}]" ;; Set) echo "${level}" > "$lv_file" strLv=${my_array[${level}]} echo "set to level ${level}: [${strLv:0:1}] [${strLv}]" ;; *) help exit 1 ;; esac else echo "Log file for $program_name does not exist." fi } # Check if correct number of arguments is passed if [ "$#" -lt 1 ]; then help exit 1 fi # Parse options and arguments program_name=$1 option=$2 level=$3 # swap $1 $2 if [[ "$1" = -* ]];then option=$1 program_name=$2 fi #echo "1: [$1] 2: [$2] 3: [$3] " #echo "option = ${option}" #echo "program_name = $program_name" #echo "level = $level" if [[ ${option} =~ ^-s[0-9]$ ]]; then level=${option#-s} option="-s" fi # 动态等级 log_setlv=/tmp/prlog/level/${program_name} case "$option" in -v|--verbose) echo 6 > ${log_setlv} extract_log "V" "$program_name" ;; -t|--trace) echo 6 > ${log_setlv} extract_log "V" "$program_name" ;; -d|--debug) echo 5 > ${log_setlv} extract_log "D" "$program_name" ;; -i|--info) echo 4 > ${log_setlv} extract_log "I" "$program_name" ;; -w|--warn) echo 3 > ${log_setlv} extract_log "W" "$program_name" ;; -err|--err) echo 2 > ${log_setlv} extract_log "err" "$program_name" ;; -e*|--error) echo 2 > ${log_setlv} extract_log "E" "$program_name" ;; -c|--critical) echo 1 > ${log_setlv} extract_log "C" "$program_name" ;; -f|--fault) echo 1 > ${log_setlv} extract_log "C" "$program_name" ;; -clear|--clear) clear_log "$program_name" ;; -g*|--get) level_log "Get" "$program_name" "${level}" ;; -s|-set|--set) level_log "Set" "$program_name" "${level}" ;; *) echo "[$@]" if [ -z "$option" ];then extract_log "V" "$program_name" fi help exit 1 ;; esac