婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > shell腳本實現分日志級別輸出的方法

shell腳本實現分日志級別輸出的方法

熱門標簽:昆明電銷機器人價格 400的電話一般從哪里辦理 春運地圖標注app 益陽400電話申請辦理流程 地圖標注人員分布 梧州防封電銷卡 江西全自動外呼系統報價 上海機器人外呼系統哪家好 怎么用百度地圖標注坐標

shell腳本如何優雅的記錄日志信息,下面讓我們一步一步,讓shell腳本的日志也變得高端起來,實現如下功能

①設定日志級別,實現可以輸出不同級別的日志信息,方便調試

②日志格式類似為:[日志級別] 時間 funcname:函數名 [lineno:行號] 日志信息

③不同級別,設定不同顏色

④讓其變為函數庫文件,重用代碼

下面看看我用shell記錄日志的進化之路

1.最簡單的日志記錄方式

對于剛入門的同學,記錄日志一般用echo加重定向方式,這應該是最原始的方式了^_^

echo "log message" > file

2.簡單函數封裝,簡化重復寫重定向到日志文件

當你想記錄的日志變多,你得重復的寫echo “”>$logfile,這也是件挺麻煩的事情,于是我就寫了個log函數,這樣修改的時候也比較方便。

log() {
  msg=$1
  echo $msg > log.file
}

3.實現日志的級別不同顏色輸出

某天使用某腳本的時候,報錯了確沒發現,于是就想將報錯信息用不同顏色字體,這樣會稍微友好一點,請看下面函數

function log {
  local text;local logtype
  logfile=./log.txt
  logtype=$1
  text=$2
  #其實可以再將日志的格式定義為一個字符串,這樣就不用重復寫`date +'%F %H:%M:%S'`\t$1\t$2\033[0m,又可以省好多代碼。
  case $logtype in 
    error)
      echo -e "\033[31m`date +'%F %H:%M:%S'`\t$1\t$2\033[0m" | tee -a $logfile;;
    info)
      echo -e "\033[32m`date +'%F %H:%M:%S'`\t$1\t$2\033[0m" | tee -a $logfile;;
    warn)
      echo -e "\033[33m`date +'%F %H:%M:%S'`\t$1\t$2\033[0m" | tee -a $logfile;;
  esac
}

4.實現設定日志級別,輸出不同級別以上的日志,方便調試

學了Python的日志模塊后,想著如何像python那樣,可以設定日志級別,比如設定debug,那么只有debug級別以上的日志會輸出,而且日志的格式也支持定義,常見格式 如下:[日志級別] 時間 funcname:函數名 [lineno:行號] 日志信息

請看如下的log函數:大家可以將log函數放到一個單獨文件,稱為函數庫文件,然后寫腳本的時候,通過source或 . 命令引入,就想python的導入模塊一樣,重用log的代碼

#!/bin/bash
#可將log函數單獨放一個文件,通過.命令引入,這樣就可以共用了
#. log.sh 
#設置日志級別
loglevel=0 #debug:0; info:1; warn:2; error:3
logfile=$0".log"
function log {
    local msg;local logtype
    logtype=$1
    msg=$2
    datetime=`date +'%F %H:%M:%S'`
    #使用內置變量$LINENO不行,不能顯示調用那一行行號
    #logformat="[${logtype}]\t${datetime}\tfuncname:${FUNCNAME[@]} [line:$LINENO]\t${msg}"
    logformat="[${logtype}]\t${datetime}\tfuncname: ${FUNCNAME[@]/log/}\t[line:`caller 0 | awk '{print$1}'`]\t${msg}"
    #funname格式為log error main,如何取中間的error字段,去掉log好辦,再去掉main,用echo awk? ${FUNCNAME[0]}不能滿足多層函數嵌套
    {  
    case $logtype in 
        debug)
            [[ $loglevel -le 0 ]]  echo -e "\033[30m${logformat}\033[0m" ;;
        info)
            [[ $loglevel -le 1 ]]  echo -e "\033[32m${logformat}\033[0m" ;;
        warn)
            [[ $loglevel -le 2 ]]  echo -e "\033[33m${logformat}\033[0m" ;;
        error)
            [[ $loglevel -le 3 ]]  echo -e "\033[31m${logformat}\033[0m" ;;
    esac
    } | tee -a $logfile
}
#以下為測試
debug () {
    log debug "there are $# parameters:$@"
}
info() {
    log info "funcname:${FUNCNAME[@]},lineno:$LINENO"
}
warn() {
    log warn "funcname:${FUNCNAME[0]},lineno:$LINENO"
}
error() {
    log error "the first para:$1;the second para:$2"
}
set -x
debug first second
set +x
info first second
warn first second 
error first second

輸出如下:

在寫這個函數的遇到一個問題就是不能用內建變量$LINENO來取得調用的行號,只能取得log函數中定義$LINENO那一行,搜了許久找到的解決辦法是利用caller命令,關于caller命令的用法,如下:

5.caller的用法

caller命令放到函數中, 將會在stdout上打印出函數的調用者信息.,caller命令也可以在一個被source的腳本中返回調用者信息. 當然這個調用者就是source這個腳本的腳本. 就像函數一樣, 這是一個”子例程調用”.你會發現這個命令在調試的時候特別有用.

 #!/bin/bash

 function1 ()
 {
  # 在 function1 () 內部.
  caller 0  # 顯示調用者信息.
 }

 function1  # 腳本的第9行.

 # 9 main test.sh
 # ^         函數調用者所在的行號.
 #  ^^^^      從腳本的"main"部分開始調用的.
 #    ^^^^^^^  調用腳本的名字.

 caller 0   # 沒效果, 因為這個命令不在函數中.

以上這篇shell腳本實現分日志級別輸出的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • shell將腳本輸出結果記錄到日志文件的實現
  • 輸出執行操作和打印日志的shell腳本實例
  • Linux shell腳本輸出日志筆記整理(必看篇)

標簽:贛州 亳州 懷化 北京 河南 惠州 九江 新疆

巨人網絡通訊聲明:本文標題《shell腳本實現分日志級別輸出的方法》,本文關鍵詞  shell,腳本,實現,分,日志,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《shell腳本實現分日志級別輸出的方法》相關的同類信息!
  • 本頁收集關于shell腳本實現分日志級別輸出的方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品中文有码| 国产精品第四页| 欧美日韩国产大片| 91黄色激情网站| 在线看国产日韩| 欧洲一区在线电影| 制服.丝袜.亚洲.另类.中文| 日韩欧美国产系列| 国产午夜精品美女毛片视频| 欧美一级专区免费大片| 日韩一区二区在线免费观看| 日韩欧美不卡在线观看视频| 欧美精品一区二区蜜臀亚洲| 国产日韩一级二级三级| 亚洲视频在线观看一区| 午夜欧美2019年伦理| 视频一区欧美精品| 国产一区二区三区免费| 99久久婷婷国产精品综合| 成人app下载| 91麻豆123| 欧美日韩精品福利| 久久亚洲免费视频| 一区二区三区小说| 国内精品嫩模私拍在线| 91浏览器打开| 日韩午夜在线观看视频| 国产精品麻豆一区二区| 午夜精品影院在线观看| 狠狠色丁香久久婷婷综合丁香| 成人aaaa免费全部观看| 欧美日韩精品一区二区三区四区 | 欧美videossexotv100| 久久精品男人的天堂| 亚洲愉拍自拍另类高清精品| 极品少妇xxxx精品少妇| 色女孩综合影院| 久久久久久久久久看片| 午夜视黄欧洲亚洲| 99视频精品全部免费在线| 欧美精品xxxxbbbb| 综合自拍亚洲综合图不卡区| 日本成人在线电影网| 91丨九色丨国产丨porny| 欧美大尺度电影在线| 亚洲精品水蜜桃| 欧美视频自拍偷拍| 中文一区在线播放| 精品一区二区在线观看| 欧美区在线观看| 一区二区三区在线视频观看58| 久久99国产精品久久| 欧美日韩电影在线播放| 中文字幕制服丝袜成人av| 精品一二三四区| 欧美剧情片在线观看| 一区二区三区成人| 97se亚洲国产综合自在线不卡| 久久久久久久久久美女| 极品美女销魂一区二区三区| 日韩午夜在线影院| 首页综合国产亚洲丝袜| 欧美日韩精品欧美日韩精品一 | 欧美视频一区在线| 中文字幕一区二区三区在线不卡| 国产一区二区中文字幕| 欧美精品一区二| 狠狠色伊人亚洲综合成人| 欧美成人r级一区二区三区| 日本亚洲视频在线| 欧美一区二区三区视频| 日本免费在线视频不卡一不卡二| 欧美性生活大片视频| 一区二区三区不卡在线观看| 91在线小视频| 亚洲午夜私人影院| 91麻豆精品国产91久久久使用方法 | 色哟哟国产精品免费观看| 亚洲欧美电影一区二区| 色婷婷狠狠综合| 亚洲国产综合在线| 欧美日韩在线亚洲一区蜜芽| 亚洲a一区二区| 日韩视频一区在线观看| 久久精品国产澳门| 亚洲精品一区二区三区在线观看| 国产一区二区三区香蕉| 自拍偷在线精品自拍偷无码专区| 99久久国产综合精品色伊| 亚洲一卡二卡三卡四卡无卡久久| 精品视频一区三区九区| 另类成人小视频在线| 久久综合色天天久久综合图片| 成人性生交大片免费看中文| 亚洲欧美另类久久久精品| 欧美久久一二三四区| 国产剧情在线观看一区二区| 亚洲日穴在线视频| 欧美老肥妇做.爰bbww视频| 国产一区欧美一区| 亚洲精品久久嫩草网站秘色| 欧美一区二区福利在线| 高清视频一区二区| 五月激情综合婷婷| 国产蜜臀av在线一区二区三区| 91国内精品野花午夜精品 | 色八戒一区二区三区| 日韩国产欧美在线视频| 久久亚洲免费视频| 欧美日韩一区二区在线观看视频| 国内精品国产三级国产a久久| 亚洲激情男女视频| 久久蜜桃一区二区| 成人高清免费观看| 亚洲精品中文字幕乱码三区| 精品久久久久99| 91免费精品国自产拍在线不卡| 免费人成精品欧美精品 | 久久国产欧美日韩精品| 亚洲欧洲一区二区在线播放| 4438亚洲最大| 欧美日韩一区国产| 99re6这里只有精品视频在线观看| 久久精品久久久精品美女| 亚洲精品ww久久久久久p站 | 偷拍与自拍一区| 亚洲色图20p| 国产精品久久久久久久久图文区| 欧美一区二区视频在线观看| 99精品视频一区二区| 美女国产一区二区| 日本美女视频一区二区| 一区二区三区91| 国产精品网友自拍| 久久奇米777| 欧美一区二区三区爱爱| 欧洲一区在线观看| 日本高清不卡视频| 99re热这里只有精品免费视频| 国产.欧美.日韩| 成人免费视频视频在线观看免费| 国模套图日韩精品一区二区| 天堂影院一区二区| 婷婷成人激情在线网| 亚洲精品国产无天堂网2021 | 欧美性xxxxxxxx| 欧美自拍偷拍一区| 在线视频国内自拍亚洲视频| 色菇凉天天综合网| 欧洲一区二区三区免费视频| 色就色 综合激情| 欧美唯美清纯偷拍| 欧美网站一区二区| 69av一区二区三区| 久久网站热最新地址| 久久久不卡网国产精品一区| 日本一区二区三区四区在线视频| 欧美电视剧在线看免费| 久久久久久久久99精品| ㊣最新国产の精品bt伙计久久| 亚洲免费av高清| 天天操天天干天天综合网| 久久福利视频一区二区| 国产成a人亚洲| 成人精品视频一区| 欧美性一区二区| 日韩写真欧美这视频| 久久综合网色—综合色88| 国产精品久久久久久久久免费樱桃| 亚洲欧美二区三区| 久久国内精品视频| 国产福利一区在线| 91激情五月电影| 日韩欧美一级片| 亚洲欧洲精品一区二区三区不卡 | 欧美成人r级一区二区三区| 精品国产乱码久久久久久浪潮 | 欧美日本乱大交xxxxx| 日韩精品一区在线| 亚洲视频在线一区观看| 青青草原综合久久大伊人精品优势| 国产激情精品久久久第一区二区| 色域天天综合网| 精品国产电影一区二区| 亚洲免费资源在线播放| 激情av综合网| 欧美日产在线观看| 中文字幕国产一区| 另类调教123区 | 欧美色视频在线观看| 久久婷婷色综合| 亚洲成a人v欧美综合天堂| 成人免费毛片片v| 欧美一区二区三区在线| 亚洲乱码中文字幕| 成人激情电影免费在线观看| 日韩欧美综合一区| 亚洲成a人片在线观看中文| 成人动漫视频在线| 久久婷婷综合激情|