为了账号安全,请及时绑定邮箱和手机立即绑定

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
提交
取消