通過項目學(xué)習(xí)Go語言之log

任何線上系統(tǒng)運行日志log都是至關(guān)重要的,當(dāng)系統(tǒng)規(guī)模比較小時不存在系統(tǒng)間的調(diào)用完全是一個自治的系統(tǒng),當(dāng)系統(tǒng)發(fā)展到一定階段勢必需要和周邊關(guān)聯(lián)系統(tǒng)進(jìn)行交互,尤其是在當(dāng)今微服務(wù)盛行的時代,系統(tǒng)間的調(diào)用關(guān)系變得錯綜復(fù)雜,此時log將變得更加至關(guān)重要。

當(dāng)系統(tǒng)崩潰、調(diào)用鏈?zhǔn)〉惹闆r發(fā)生時,log將成為排查問題的唯一入手點,也可作為“甩鍋”的證據(jù)。

在開發(fā)階段我們可以直接輸出到控制臺,便于開發(fā)調(diào)試。但是,在生產(chǎn)環(huán)境我們需要把日志輸出的文件以便查詢和監(jiān)控統(tǒng)計。那是不是說,任何情況下所有的日志都要輸出,各種日志越詳細(xì)越好呢?其實不然,日志輸出到文件勢必涉及到IO操作,大量的日志輸出肯定會影響系統(tǒng)的性能。所以,不同場景配置不同的日志很重要。

任何開發(fā)語言的日志組件都分成了不同的級別,包括debug、info、warn、error等級別。一般在生產(chǎn)環(huán)境會將日志調(diào)整為error級別兼顧性能和排錯。

Go作為一款優(yōu)秀的定位為服務(wù)端分布式集群開發(fā)的語言其內(nèi)置了標(biāo)準(zhǔn)log的支持。

我們先看一下Go語言內(nèi)置log的簡單使用。


簡單日志打印

以上日志輸出


輸出結(jié)果

通過簡單的日志使用,我們看到日志輸出格式是日期時間 日志的msg。在通過日志排錯定位問題的時候我們希望知道日志信息是從哪個代碼文件的什么位置拋出的,go log為我們提供了自定義日志格式的功能,下面是go log包的我們可以控制日志輸出參數(shù),我們可以通過組合的方式進(jìn)行日志格式的定義,以方便我們定位問題排錯。


可選的日志輸出參數(shù)



自定義日志格式

運行看看結(jié)果

運行結(jié)果

我們看到,日志按照我們定義的格式進(jìn)行了輸出,這樣我們就能快速定位到日志輸出的位置以便排錯。在項目開發(fā)過程中,為了規(guī)劃整個項目的日志格式我們一般會通過init方法統(tǒng)一設(shè)定日志格式。

在實際的生產(chǎn)環(huán)境中我們會將日志統(tǒng)一集中匯集到我們的統(tǒng)一日志處理集群,比如大多數(shù)公司都在使用的ELK,此時區(qū)分不同項目的日志就顯得尤為重要,go log也為我們考慮到了,可以通過調(diào)用SetPrefix方法來設(shè)置日志統(tǒng)一的前綴。

以上我們看到日志都是直接輸出到控制臺,在項目上線后,我們會將日志輸出到文件,通過以下方式我們可以設(shè)置日志打印輸出的位置。


輸出到日志文件

執(zhí)行 go run 后我們查看日志文件,我們可以看到日志正常輸出到了我們指定的文件:


查看輸出到文件的日志


上面我們提到日志分級輸出,我們可以通過go log包為我們提供的基礎(chǔ)功能實現(xiàn)自己的分級日志輸出功能,我們創(chuàng)建一個mylog的目錄(包),編寫一個log_util 的日志類 如下:


logutil類

運行g(shù)o run example.go


調(diào)用編寫的日志工具
輸出到三個文件的日志


以上是我們通過go語言自帶的log來實現(xiàn)的自己的日志工具。Go社區(qū)很強大,社區(qū)的大佬們?yōu)槲覀儗崿F(xiàn)了更加強大好用的工具類,比如支持按照日期、大小滾動切割文件輸出;有著更細(xì)致的日志級別有更高的更好的性能;支持各種插件可以直接對接elk、prometheus等。下面為大家介紹兩款日志框架:

logrus :?https://github.com/sirupsen/logrus

seelog:https://github.com/cihub/seelog


本節(jié)完。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在應(yīng)用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計分析...
    時待吾閱讀 5,217評論 1 13
  • idea 添加注釋/** 然后回車 選中代碼塊 Ctrl+Shift+/ 重點推薦閱讀:https://www....
    Helen_Cat閱讀 20,483評論 0 37
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計分析...
    時待吾閱讀 5,159評論 0 6
  • 1. 分布式系統(tǒng)核心問題 參考書籍:《區(qū)塊鏈原理、設(shè)計與應(yīng)用》 一致性問題例子:兩個不同的電影院買同一種電影票,如...
    molscar閱讀 1,003評論 0 0
  • 有一天我在goland里看著輸出日志,很想知道它是哪個文件,第多少行打出來的,然后就找到了log功能。TRACE:...
    合肥黑閱讀 40,580評論 2 10

友情鏈接更多精彩內(nèi)容