Golang基於beego框架開發Web APP的訪問日誌記錄模組
日誌系統或者說使用者操作記錄,在後端中的作用可謂是舉足輕重。那日誌記錄到底有什麼用?用處還真的挺多的,常見的比如debug、資料分析、安全防護等等等等。那今天我們用Golang基於beego框架寫一個伺服器端訪問日誌記錄模組,這裡面涉及到的知識點主要就是Golang的檔案讀寫。
Let's do it
因為我們的日誌記錄系統是基於beego的web應用,所以如果對beego不是很瞭解的朋友可以先去了解一下beego,不過其實也沒什麼大礙,因為可以順便當成是Golang處理文字檔案的參考教材
為了讓所有的頁面都能執行這個日誌記錄程式碼,我們首先建立一個base.go的檔案,作為一個全部頁面所需要依賴的基礎控制器。
type Base struct {
beego.Controller
}
然後沒建立一個控制器的時候,在申明的時候就可以直接呼叫這個基礎控制器。
type PageController struct {
Base
}
這樣執行每個頁面控制器的同時會事先執行基礎控制器,也就是Base控制器。那我們把日誌記錄的程式碼寫在基礎控制器裡就好了。
我先把整體程式碼貼一下吧,反正就是相當easy,整體也沒什麼邏輯性,主要是字串拼接這樣子
func (s *Wxbase) Prepare() { url := s.Ctx.Request.RequestURI var cont string cont += "[T]" + Totime(time.Now().Unix(), "15:04:05") + " " + s.Ctx.Input.Method() + " " + s.Ctx.Input.Site() + s.Ctx.Input.URI() + " - [I]" + s.Ctx.Input.IP() + " | [U]" + s.Ctx.Input.UserAgent() + " [W]Wechat/Browser " if s.Ctx.Input.Referer() != "" { cont += "[F]" + s.Ctx.Input.Referer() } var filename = "./visit/logs/" + Totime(models.Gettimestemp(), "20060102") + ".log" var erro error f, erro := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666) check(erro) _, erro = io.WriteString(f, cont+"\n") check(erro) }
func check(e error) {
if e != nil {
beego.Debug(e)
}
}
首先我們把使用者訪問的地址付給url變數(這個應該可以不用介紹吧 - -)
url := s.Ctx.Request.RequestURI
然後把想要記錄的資料都按照格式拼接起來,為什麼按照格式拼接?你亂糟糟的看得懂?分析資料難道不需要程式來分析的嗎?
cont += "[T]" + Totime(time.Now().Unix(), "15:04:05") + " " + s.Ctx.Input.Method() + " " + s.Ctx.Input.Site() + s.Ctx.Input.URI() + " - [I]" + s.Ctx.Input.IP() + " | [U]" + s.Ctx.Input.UserAgent() + " [W]Wechat/Browser " if s.Ctx.Input.Referer() != "" { cont += "[F]" + s.Ctx.Input.Referer() }
最後是以年月日為檔名,以讀寫追加的方式操作檔案。
var filename = "./visit/logs/" + Totime(models.Gettimestemp(), "20060102") + ".log"
var erro error
f, erro := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666)
check(erro)
_, erro = io.WriteString(f, cont+"\n")
check(erro)
哦哦,這個Totime是我封裝的一個時間戳轉換,很簡單的,那也上一下程式碼吧:
func Totime(timestemp int64, format string) (times string) {
tm := time.Unix(timestemp, 0)
times = tm.Format(format)
return
}
這樣,就可以記錄下使用者的訪問記錄了。當然,這裡的資料是我想要的,你可以吧自己想要的資料都加進去,然後得到自己想要的一個訪問日誌記錄。
但這個只是一個記錄日誌的方法,還有就是日誌分析程式,這個才是有意思的東西。分析資料真的相當有意思,不過這次就先寫這個日誌記錄,下次再寫一個日誌分析的程式吧,看這篇部落格是不是吸引人吧,要是有人支援,再給大家玩點有意思的