在檔案日誌中,還存在乙個問題,就是在日誌寫檔案時間長了以後,日誌檔案肯定會非常大,內容非常多,這個時候如果我們需要去定位乙個錯誤,會耗費很長的時間。所以我們需要將日誌檔案進行分割,分割檔案我們可以採用一天分割一次,或者檔案大小達到乙個體積進行分割。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
}複製**
等一段時間看看是否進行分割了。 這裡是原始檔hm_logfunc
initlog
(logpath, logname string)
for
}複製**
我們日誌庫就已經開發完成了,當然,和目前主流的日誌庫比還顯得簡漏。不過我們的目的不在於寫的多好,而在於寫的過程。也歡迎各位真正裡面的錯誤,謝謝。
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...