go 開發屬於自己的日誌庫 檔案日誌庫原型實現

2021-09-11 10:01:42 字數 2818 閱讀 6649

新建乙個專案,這裡我用的hm_log,在專案下新建乙個log_inte***ce.go日誌規範,定義日誌級別的方法:

package hm_log

type log inte***ce ) // ...表示接收可變引數

trace(format string, args ...inte***ce{})

info(format string, args ...inte***ce{})

warn(format string, args ...inte***ce{})

error(format string, args ...inte***ce{})

fatal(format string, args ...inte***ce{})

close() // 檔案需要進行關閉操作

}複製**

因為我們是要列印到檔案裡面去,所以我還需要新建乙個file.go:

package hm_log

type filelog struct

func

newfilelog

(logpath, logname string)

log

}func

(f *filelog)

debug

(format string, args ...inte***ce{})

func

(f *filelog)

trace

(format string, args ...inte***ce{})

func

(f *filelog)

info

(format string, args ...inte***ce{})

func

(f *filelog)

warn

(format string, args ...inte***ce{})

func

(f *filelog)

error

(format string, args ...inte***ce{})

func

(f *filelog)

fatal

(format string, args ...inte***ce{})

func

(f *filelog)

close()

複製**

現在我們基本實現了file的初始**了,然後現在來實現file的功能。實現功能之前,新建乙個log_const.go,我們需要一些常量。

package hm_log

const (

debuglevel = iota

tracelevel

infolevel

warnlevel

errorlevel

fatallevel

)複製**

因為我們是寫入檔案中的,所以需要進行開啟檔案操作。為了在後續的日誌檢視方便,我們需要將普通日誌和錯誤日誌分開儲存。

type filelog struct 

func

newfilelog

(logpath, logname string)

log

log.init()

return log

}func

(f *filelog)

init()

f.file = file

// 錯誤日誌

warnfilename := fmt.sprintf("%s/%s.log.wf", f.logpath, f.logname)

if err != nil

f.warnfile = warnfile

}複製**

然後就可以實現之前的日誌方法了。

func

(f *filelog)

debug

(format string, args ...inte***ce{})

func

(f *filelog)

trace

(format string, args ...inte***ce{})

func

(f *filelog)

info

(format string, args ...inte***ce{})

func

(f *filelog)

warn

(format string, args ...inte***ce{})

func

(f *filelog)

error

(format string, args ...inte***ce{})

func

(f *filelog)

fatal

(format string, args ...inte***ce{})

func

(f *filelog)

close()

複製**

到這裡檔案日誌庫基本完成了,當寫完乙個功能時,我們需要進行單元測試,所以我們新建乙個log_test.go來測試我們寫的檔案日誌庫。

package log

import (

"testing"

)func

testfilelog

(t *testing.t)

複製**

go開發屬於自己的日誌庫 檔案日誌庫實現

所以,我們的日誌列印的內容應該是這樣的 2018 11 0818 18 18.888 debug logdebug.go logdebug.debug 20 this is a debug log我們現在file.go的debug方法中將時間加入進去 func f filelog debug for...

go開發屬於自己的日誌庫 日誌切分

在檔案日誌中,還存在乙個問題,就是在日誌寫檔案時間長了以後,日誌檔案肯定會非常大,內容非常多,這個時候如果我們需要去定位乙個錯誤,會耗費很長的時間。所以我們需要將日誌檔案進行分割,分割檔案我們可以採用一天分割一次,或者檔案大小達到乙個體積進行分割。log const.go const logspli...

go開發屬於自己的日誌庫 日誌庫需求分析

go的第三方框架中已經有很多日誌庫了,為什麼還要自己寫一遍。俗話說,好記性不如爛筆頭,更何況是程式語言呢。多寫多練才能使自己技術進步。一般來說,日誌庫支援檔案寫入和console顯示,還有的支援寫入在網路服務中,這次的日誌庫,只需要實現檔案寫入和console就可以了。debug 除錯程式,日誌最詳...