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

2021-09-11 10:01:42 字數 2082 閱讀 7479

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

const (

logsplittypehour = iota

logsplittypesize

)複製**

file.go

type filelog struct 

func

newfilelog

(config map[string]string)

(logfile log, err error)

else

logsplitsize, err = strconv.parseint(splitsize, 10, 64)

if err != nil

logsplittype = logsplittypesize

} else

} logfile = &filelog

logfile.init()

return

}func

(f *filelog)

writelogbackground()

f.checksplitfile(logdata.iswarn) // 檢查檔案分割型別

fmt.fprintf(file, "%s %s [%s/%s:%d] %s\n", logdata.timestr, logdata.levelstr,

logdata.filename, logdata.funcname, logdata.lineno, logdata.message) }}

func

(f *filelog)

checksplitfile

(iswarn bool)

f.splitsize(iswarn)

}// 根據檔案大小來分割

func

(f *filelog)

splitsize

(iswarn bool)

fileinfo, err := file.stat() // 可以得到檔案的引數

if err != nil

filesize := fileinfo.size()

if filesize <= f.logsplitsize

var backupfilename string

var filename string

now := time.now()

if iswarn else

file.close()

os.rename(filename, backupfilename) // 重新命名

if err != nil

if iswarn else

}// 根據時間來進行分割

func

(f *filelog)

splithour

(iswarn bool)

f.lastsplithour = hour

var backupfilename string

var filename string

if iswarn else

file := f.file

if iswarn

file.close()

os.rename(filename, backupfilename)

if err != nil

if iswarn else

}複製**

我們來測試一下:

func

initlog

(logpath, logname string)

for

}複製**

等一段時間看看是否進行分割了。 這裡是原始檔hm_log

我們日誌庫就已經開發完成了,當然,和目前主流的日誌庫比還顯得簡漏。不過我們的目的不在於寫的多好,而在於寫的過程。也歡迎各位真正裡面的錯誤,謝謝。

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

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

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 開發屬於自己的日誌庫 檔案日誌庫原型實現

新建乙個專案,這裡我用的hm log,在專案下新建乙個log inte ce.go日誌規範,定義日誌級別的方法 package hm log type log inte ce 表示接收可變引數 trace format string,args inte ce info format string,a...