访问beego服务器网页,Golang基于beego框架开发Web APP的访问日志记录模块

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

Let's do it

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

type Base struct {

beego.Controller

}

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

type PageController struct {

Base

}

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

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

}

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

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

你可能感兴趣的:(访问beego服务器网页)