亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Golang基于beego框架開發Web APP的訪問日志記錄模塊

標簽:
安全

日志系统或者说用户操作记录,在后端中的作用可谓是举足轻重。那日志记录到底有什么用?用处还真的挺多的,常见的比如debug、数据分析、安全防护等等等等。那今天我们用Golang基于beego框架写一个服务器端访问日志记录模块,这里面涉及到的知识点主要就是Golang的文件读写。


Let's do it

因为我们的日志记录系统是基于beego的web应用,所以如果对beego不是很了解的朋友可以先去了解一下beego,不过其实也没什么大碍,因为可以顺便当成是Golang处理文本文件的参考教材大笑

为了让所有的页面都能执行这个日志记录代码,我们首先创建一个base.go的文件,作为一个全部页面所需要依赖的基础控制器。

  1. type Base struct {  

  2.     beego.Controller  

  3. }  

然后没创建一个控制器的时候,在申明的时候就可以直接调用这个基础控制器。


  1. type PageController struct {  

  2.     Base  

  3. }  

这样执行每个页面控制器的同时会事先执行基础控制器,也就是Base控制器。那我们把日志记录的代码写在基础控制器里就好了。

我先把整体代码贴一下吧,反正就是相当easy,整体也没什么逻辑性,主要是字符串拼接这样子偷笑


  1. func (s *Wxbase) Prepare() {  

  2.  url := s.Ctx.Request.RequestURI  

  3.  var cont string  

  4.  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 "  

  5.  if s.Ctx.Input.Referer() != "" {  

  6.   cont += "[F]" + s.Ctx.Input.Referer()  

  7.  }  

  8.  var filename = "./visit/logs/" + Totime(models.Gettimestemp(), "20060102") + ".log"  

  9.  var erro error  

  10.  f, erro := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666)  

  11.  check(erro)  

  12.  _, erro = io.WriteString(f, cont+"\n")  

  13.  check(erro)  

  14. }  


  1. func check(e error) {  

  2.  if e != nil {  

  3.   beego.Debug(e)  

  4.  }  

  5. }  

首先我们把用户访问的地址付给url变量(这个应该可以不用介绍吧 - -)

  1. url := s.Ctx.Request.RequestURI  

然后把想要记录的数据都按照格式拼接起来,为什么按照格式拼接?你乱糟糟的看得懂?分析数据难道不需要程序来分析的吗?

  1. 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 "  

  2. if s.Ctx.Input.Referer() != "" {  

  3.  cont += "[F]" + s.Ctx.Input.Referer()  

  4. }  


最后是以年月日为文件名,以读写追加的方式操作文件。

  1. var filename = "./visit/logs/" + Totime(models.Gettimestemp(), "20060102") + ".log"  

  2. var erro error  

  3. f, erro := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666)  

  4. check(erro)  

  5. _, erro = io.WriteString(f, cont+"\n")  

  6. check(erro)  

哦哦,这个Totime是我封装的一个时间戳转换,很简单的,那也上一下代码吧:

  1. func Totime(timestemp int64, format string) (times string) {  

  2.  tm := time.Unix(timestemp, 0)  

  3.  times = tm.Format(format)  

  4.  return  

  5. }  

这样,就可以记录下用户的访问记录了。当然,这里的数据是我想要的,你可以吧自己想要的数据都加进去,然后得到自己想要的一个访问日志记录。

但这个只是一个记录日志的方法,还有就是日志分析程序,这个才是有意思的东西。分析数据真的相当有意思,不过这次就先写这个日志记录,下次再写一个日志分析的程序吧,看这篇博客是不是吸引人吧,要是有人支持,再给大家玩点有意思的大笑

原文出处

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消