Golang基于beego框架开发Web APP的访问日志记录模块

版权声明:原创文章转载请标明出处 https://blog.csdn.net/superwebmaster/article/details/80497896

日志系统或者说用户操作记录,在后端中的作用可谓是举足轻重。那日志记录到底有什么用?用处还真的挺多的,常见的比如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
}

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

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

阅读更多

扫码向博主提问

石石石头哥哥

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • Web开发
  • Web前端
  • Golang
  • JavaScript
  • beego
去开通我的Chat快问

没有更多推荐了,返回首页