偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

挺好用!Shell腳本日志技巧

開發(fā) 后端
本文介紹了shell腳本中日志打印的一些技巧, 這些技巧都是從實(shí)踐中總結(jié)出來的,文中提供了腳本的全部代碼,可以拿來直接使用,也可根據(jù)實(shí)際的需求自行調(diào)整。

[[414645]]

本文轉(zhuǎn)載自微信公眾號(hào)「Linux開發(fā)那些事兒」,作者LinuxThings。轉(zhuǎn)載本文請(qǐng)聯(lián)系Linux開發(fā)那些事兒公眾號(hào)。

執(zhí)行shell腳本時(shí),常常會(huì)打印一些日志到控制臺(tái),根據(jù)輸出的日志,來判斷腳本功能正確與否

但是,太多日志打印的話,會(huì)讓閱讀變得很困難,從日志信息里面找到我們關(guān)心的那部分也變得很不方便了

所以,有一個(gè)好用的shell腳本日志接口是非常有必要的,本文將聊聊實(shí)踐中日志打印的一些技巧

常見日志打印方式

編寫 shell 腳本時(shí),最簡(jiǎn)單的日志打印是使用 echo 輸出,比如: 下面是打印一個(gè)測(cè)試程序的日志

  1. [root@VM-0-2-centos ~]# echo "this is a log test..." 
  2. this is a log test... 

上面的方式使用起來非常簡(jiǎn)單,編寫效率也很高,對(duì)于一些功能簡(jiǎn)單,代碼量少的shell腳本,非常適合這種日志打印的方式,簡(jiǎn)單快捷

通用接口

上面的小節(jié)中,每次都用 echo ,沒有一個(gè)統(tǒng)一的輸出格式,如果需要在每條日志開頭加上指定內(nèi)容, 就需要修改腳本中每一處的日志,這就變成了一個(gè)體力活了

針對(duì)這點(diǎn),可以定義一個(gè)輸出函數(shù),所有的的輸出統(tǒng)一調(diào)用這個(gè)函數(shù), 現(xiàn)有測(cè)試腳本 t.sh 內(nèi)容如下

  1. #!/bin/bash 
  2.  
  3. function log() 
  4.    echo "$@" 

另外新建一個(gè)測(cè)試腳本 ta.sh

  1. #!/bin/bash 
  2.  
  3. source ./t.sh 
  4.  
  5. log "this is a test..." 
  6. log "today is `date '+%Y-%m-%d'` " 

執(zhí)行 ./ta.h 命令,結(jié)果如下

  1. [root@VM-0-2-centos shell_log]# ./ta.sh  
  2. this is a test... 
  3. today is 2021-07-27 

如果現(xiàn)在想在每一行日志前面加上當(dāng)前時(shí)間的話,直接修改 t.sh 中的 log 函數(shù), t.sh調(diào)整后的腳本如下

  1. #!/bin/bash 
  2.  
  3. function log() 
  4.    echo "$(date '+%Y-%m-%d %H:%M:%S') $@" 

然后再次執(zhí)行 ./ta.sh 命令,結(jié)果如下

  1. [root@VM-0-2-centos shell_log]# ./ta.sh  
  2. 2021-07-27 19:55:54 this is a test... 
  3. 2021-07-27 19:55:54 today is 2021-07-27 

上面只修改了 log 函數(shù),ta.sh 中的每一行日志開頭就都輸出了當(dāng)前的時(shí)間, $@ 表示傳入log 函數(shù)的所有參數(shù)

打印開關(guān)

調(diào)試腳本的時(shí)候,會(huì)加上很多的日志打印,當(dāng)調(diào)試完了之后,需要關(guān)閉所有的日志輸出,上面已經(jīng)把日志打印統(tǒng)一到一個(gè)函數(shù)中了,這時(shí)我們只需要禁止執(zhí)行 log 函數(shù)的 echo 語句即可,修改之后的 t.sh 內(nèi)容如下

  1. #!/bin/bash 
  2.  
  3. function log() 
  4.      [ 0 -gt 1 ]  && echo "$(date '+%Y-%m-%d %H:%M:%S') $@" 

當(dāng) [ 0 -gt 1 ] 表示條件結(jié)果為 false 的時(shí)候,echo 語句就不會(huì)執(zhí)行,這樣就能關(guān)閉所有的日志打印

也可以在 t.sh 中加一個(gè)變量,表示是否開啟日志,當(dāng)開啟的時(shí)候,才會(huì)有日志打印,開關(guān)關(guān)閉時(shí),同時(shí)會(huì)關(guān)閉日志打印功能,調(diào)整后的 t.sh 內(nèi)容如下

  1. #!/bin/bash 
  2.  
  3. LOG_OPEN=0 
  4.  
  5. function log() 
  6.      [ $LOG_OPEN -eq 1 ]  && echo "$(date '+%Y-%m-%d %H:%M:%S') $@" 

需要開啟日志的時(shí)候,把 LOG_OPEN 設(shè)置為1,關(guān)閉日志打印,設(shè)置為0即可

日志等級(jí)

在不同的腳本邏輯中,打印的日志應(yīng)該有不同的作用,有些是臨時(shí)變量值的輸出,作為調(diào)試用的,有些是一些狀態(tài)轉(zhuǎn)換或者達(dá)到不同階段的提示信息,還有些是嚴(yán)重的錯(cuò)誤,需要重點(diǎn)輸出并提醒用戶

以上這些可以通過日志等級(jí)來實(shí)現(xiàn),把日志劃分等級(jí),不同的等級(jí)屏幕上輸出不同的顏色,便于查看,直接來看修改后的 t.sh 腳本內(nèi)容吧

  1. #!/bin/bash 
  2.  
  3. #日志級(jí)別 debug-1, info-2, warn-3, error-4, always-5 
  4. LOG_LEVEL=3 
  5.  
  6. #調(diào)試日志 
  7. function log_debug(){ 
  8.   content="[DEBUG] $(date '+%Y-%m-%d %H:%M:%S') $@" 
  9.   [ $LOG_LEVEL -le 1  ] && echo -e "\033[32m"  ${content}  "\033[0m" 
  10. #信息日志 
  11. function log_info(){ 
  12.   content="[INFO] $(date '+%Y-%m-%d %H:%M:%S') $@" 
  13.   [ $LOG_LEVEL -le 2  ] && echo -e "\033[32m"  ${content} "\033[0m" 
  14. #警告日志 
  15. function log_warn(){ 
  16.   content="[WARN] $(date '+%Y-%m-%d %H:%M:%S') $@" 
  17.   [ $LOG_LEVEL -le 3  ] && echo -e "\033[33m" ${content} "\033[0m" 
  18. #錯(cuò)誤日志 
  19. function log_err(){ 
  20.   content="[ERROR] $(date '+%Y-%m-%d %H:%M:%S') $@" 
  21.   [ $LOG_LEVEL -le 4  ] && echo -e "\033[31m" ${content} "\033[0m" 
  22. #一直都會(huì)打印的日志 
  23. function log_always(){ 
  24.    content="[ALWAYS] $(date '+%Y-%m-%d %H:%M:%S') $@" 
  25.    [ $LOG_LEVEL -le 5  ] && echo -e  "\033[32m" ${content} "\033[0m" 

把日志級(jí)別分成 5 個(gè)等級(jí),分別是 : debug日志、info日志、警告日志、錯(cuò)誤日志、一直都打印的日志 ,每個(gè)級(jí)別對(duì)應(yīng)一個(gè)函數(shù)接口,而且每個(gè)級(jí)別可以定義不同的字符顏色,方便在屏幕上查看錯(cuò)誤以及警告,上述腳本中錯(cuò)誤日志是紅色,警告日志是黃色,其他級(jí)別的日志是綠色

修改 ta.sh 腳本, 內(nèi)容如下

  1. #!/bin/bash 
  2.  
  3. source ./t.sh 
  4.  
  5. log_debug "this is debug log..." 
  6. log_info "this is info log..." 
  7. log_warn "this is warn log..." 
  8. log_err "this is error log..." 
  9. log_always "this is always log.." 

把 t.sh 中 LOG_LEVEL 設(shè)置為 1 , 執(zhí)行 ./ta.sh 命令,結(jié)果如下

再次調(diào)整 t.sh 中 LOG_LEVEL 為 3 , 執(zhí)行 ./ta.sh 命令,結(jié)果如下

從上面兩次結(jié)果可以知道,日志級(jí)別設(shè)置為 debug級(jí)別 ( LOG_LEVEL = 1 ) 時(shí),所有的等級(jí)的日志都會(huì)輸出,當(dāng)把日志級(jí)別設(shè)置為 info級(jí)別 ( LOG_LEVEL = 3 ) 后,只輸出 warn日志、error日志 以及 always日志

如果想關(guān)閉所有級(jí)別的日志,把日志級(jí)別調(diào)到比 always日志 更高的級(jí)別,也即 LOG_LEVEL 的值大于 5 就行了

寫入文件

當(dāng)腳本是定時(shí)調(diào)用的時(shí)候,有時(shí)需要查詢一段時(shí)間內(nèi)腳本運(yùn)行情況,這種情況下腳本一般都是后臺(tái)運(yùn)行的,要查詢一段時(shí)間的日志,就需要把日志寫入到日志文件中

比如:定時(shí)備份數(shù)據(jù)庫的shell腳本,就需要記錄下每次備份時(shí)的情況,便于后期查詢用

調(diào)整下 t.sh 腳本,增加日志寫入文件語句,修改后的腳本內(nèi)容如下

  1. #!/bin/bash 
  2.  
  3. #日志級(jí)別 debug-1, info-2, warn-3, error-4, always-5 
  4. LOG_LEVEL=3 
  5.  
  6. #日志文件 
  7. LOG_FILE=./log.txt 
  8.  
  9. #調(diào)試日志 
  10. function log_debug(){ 
  11.   content="[DEBUG] $(date '+%Y-%m-%d %H:%M:%S') $@" 
  12.   [ $LOG_LEVEL -le 1  ] && echo $content >> $LOG_FILE && echo -e "\033[32m"  ${content}  "\033[0m" 
  13. #信息日志 
  14. function log_info(){ 
  15.   content="[INFO] $(date '+%Y-%m-%d %H:%M:%S') $@" 
  16.   [ $LOG_LEVEL -le 2  ] && echo $content >> $LOG_FILE && echo -e "\033[32m"  ${content} "\033[0m" 
  17. #警告日志 
  18. function log_warn(){ 
  19.   content="[WARN] $(date '+%Y-%m-%d %H:%M:%S') $@" 
  20.   [ $LOG_LEVEL -le 3  ] && echo $content >> $LOG_FILE && echo -e "\033[33m" ${content} "\033[0m" 
  21. #錯(cuò)誤日志 
  22. function log_err(){ 
  23.   content="[ERROR] $(date '+%Y-%m-%d %H:%M:%S') $@" 
  24.   [ $LOG_LEVEL -le 4  ] && echo $content >> $LOG_FILE && echo -e "\033[31m" ${content} "\033[0m" 
  25. #一直都會(huì)打印的日志 
  26. function log_always(){ 
  27.    content="[ALWAYS] $(date '+%Y-%m-%d %H:%M:%S') $@" 
  28.    [ $LOG_LEVEL -le 5  ] && echo $content >> $LOG_FILE && echo -e  "\033[32m" ${content} "\033[0m" 

實(shí)際上是在每個(gè)日志級(jí)別的接口中增加了 echo $content >> $LOG_FILE 語句,表示將日志寫入文件中, $LOG_FILE 表示日志文件

目前日志級(jí)別是 warn日志 級(jí)別,執(zhí)行 ./ta.sh 命令,結(jié)果如下

從上述結(jié)果可以看出,執(zhí)行 ./ta.sh 命令之后,除了屏幕會(huì)輸出日志外,本地目錄下也會(huì)生成一個(gè) log.txt 文件,文件內(nèi)容和屏幕上的日志是一樣的

小結(jié) 

本文介紹了shell腳本中日志打印的一些技巧, 這些技巧都是從實(shí)踐中總結(jié)出來的,文中提供了腳本的全部代碼,可以拿來直接使用,也可根據(jù)實(shí)際的需求自行調(diào)整

 

責(zé)任編輯:武曉燕 來源: Linux開發(fā)那些事兒
相關(guān)推薦

2024-08-27 09:32:04

2015-03-11 10:30:52

Apple Pay

2025-02-10 07:00:00

JavaScript數(shù)組方法前端

2023-09-01 14:32:27

語言大語言模型

2021-03-21 23:08:46

安卓手機(jī)工具

2013-06-03 11:28:05

shell命令

2024-08-06 09:40:21

2019-08-14 08:03:49

LinuxShell腳本web服務(wù)

2021-06-17 06:19:20

存儲(chǔ)SQL數(shù)據(jù)庫

2020-04-01 15:11:36

Shell命令Linux

2024-11-27 09:19:25

2009-12-31 17:16:42

2011-05-04 17:41:20

原裝耗材優(yōu)點(diǎn)

2022-01-11 19:29:15

CSS JS頁面

2019-08-09 13:50:08

shellLinux

2021-12-08 09:43:46

細(xì)節(jié)Google問卷工具

2011-12-31 09:49:30

MavenJava

2020-12-14 08:30:02

JavaScript開發(fā)代碼

2025-05-08 09:05:00

Shell腳本磁盤日志

2023-08-18 15:12:00

JavaScript開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)