golang zap log打印變量動(dòng)詞出現(xiàn)多余的符號(hào) []問(wèn)題

楔子

zap一款高性能日志框架,由于業(yè)務(wù)場(chǎng)景需要,也對(duì)比了一些主流的日志框架,最后權(quán)衡選擇它比較適合。

準(zhǔn)備工作

根據(jù)官方教程,以及相關(guān)文章,迅速簡(jiǎn)單搭建淺淺封裝一層于是代碼如下非常簡(jiǎn)單:

圖1
圖2

大概流程通過(guò)New()方法讀取配置文件創(chuàng)建相應(yīng)的級(jí)別以及日志輸出格式控制,然后返回一個(gè)日志句柄賦值給_logger和_sugger.

OK到目前為止準(zhǔn)備工作基本完成

問(wèn)題復(fù)現(xiàn)

我們先打一條日志

圖3

conf.New()方法為讀取配置文件,然后把日志文件的配置傳給log.New()對(duì)象,然后我們調(diào)用log.Infof()方法打印日志。好的日志打印出來(lái)了,但是仔細(xì)看日志內(nèi)容發(fā)現(xiàn)了問(wèn)題,如圖4

圖4

如你所見(jiàn)多出了'[]'中括號(hào),為什么?難道是[%s]格式verb動(dòng)詞的緣故?于是更改下格式再次打印如下:

圖5

看來(lái)不是這個(gè)緣故了,確實(shí)有些匪夷所思,起初我以為我沒(méi)用對(duì)zap,姿勢(shì)不對(duì),于是我從zap配置上入手,我改成了json模式(當(dāng)前是conlse)以及相關(guān)的配置都沒(méi)有生效,再后來(lái)我上githu上搜了一圈也沒(méi)有搜到,這讓我有些摸不著頭腦,難道是bug?當(dāng)時(shí)想發(fā)起一個(gè)issue了,但是我想這不太可能,這種問(wèn)題相對(duì)而言比較低級(jí),肯定有人碰到過(guò),或者說(shuō)是一個(gè)低級(jí)錯(cuò)誤,才沒(méi)有相應(yīng)的文章,于是我開(kāi)始追源代碼,大概看了一下也沒(méi)有看到什么問(wèn)題,但是有一處看著比較可疑于是開(kāi)了DEBUG模式如下:

圖6

注意標(biāo)注的值變化,繼續(xù)追蹤

圖7
圖8

此刻我們發(fā)現(xiàn)s:=string(p.buf)這行的值其實(shí)已經(jīng)就是我們要打印的實(shí)際內(nèi)容了,從而也發(fā)現(xiàn)%s 動(dòng)詞 也被替換成了 [go] ,ok到這其實(shí)問(wèn)題已經(jīng)差不多明朗了。那么再看下如下代碼來(lái)說(shuō)明這個(gè)問(wèn)題。

圖9

這次問(wèn)題明朗了,其實(shí)就是go語(yǔ)法糖的問(wèn)題, v... 這種方式就是把切片對(duì)象給打散,相當(dāng)于拆分成多個(gè)單個(gè)對(duì)象,而直接傳v相當(dāng)于傳了一個(gè)整體切片對(duì)象,切片對(duì)象打印當(dāng)然是[]這種形式了。回過(guò)頭來(lái)再看下代碼,

圖10

果然沒(méi)采用把參數(shù)打散的形式傳參,相當(dāng)于傳了一個(gè)切片對(duì)象,只需要把a(bǔ)rgs后面加上三個(gè)點(diǎn)即可,測(cè)試如下:

圖11

結(jié)語(yǔ)

golang雖然語(yǔ)法相對(duì)簡(jiǎn)單容易上手,但是有些意想不到的坑讓你著實(shí)抓狂,但每次遇到問(wèn)題都會(huì)讓你學(xué)到一些新的東西,對(duì)go的認(rèn)知更加深刻。

此外還有一個(gè)問(wèn)題,就是當(dāng)infof逗號(hào)后邊的參數(shù)大于等于兩個(gè)以上時(shí),第二個(gè)參數(shù)會(huì)造成不能替換的問(wèn)題,原因還是傳切片對(duì)象的緣故。

水一篇文章。。。

一個(gè)用golang得專(zhuān)科生

完~

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

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

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