php发展

首页 » 常识 » 灌水 » 基于Go语言开发在线论坛六日志和
TUhjnbcbe - 2020/6/5 14:57:00
0、引言

到现在为止,我们已经完成了在线论坛项目基本功能的开发,相信你已经对Go语言Web编程中如何实现MVC架构模式以及CRUD(数据库增删改查)基本操作有了初步的认识。

不过到目前为止,所有的日志和错误处理都是杂糅在业务代码中,能不能统一进行处理,使得业务代码和日志及错误处理逻辑分离呢,就像Laravel框架中所做的那样?

当然可以,在这个简单的项目中,我们通过辅助函数来处理日志和错误。

1、日志处理初始化日志处理器

首先来看日志处理,在handlers/helper.php中,新增如下日志处理器初始化代码:

import("log""os")varlogger*log.Loggerfuncinit(){file,err:=os.OpenFile("logs/chitchat.log",os.O_CREATE

os.O_WRONLY

os.O_APPEND,)iferr!=nil{log.Fatalln("Failedtoopenlogfile",err)}logger=log.New(file,"INFO",log.Ldate

log.Ltime

log.Lshortfile)}

这里我们借助Go官方提供的log包进行日志处理,首先声明一个*log.Logger类型的logger变量作为日志处理器,以便可以全局使用。默认的日志文件位于logs/chitchat.log,我们通过os.OpenFile打开这个日志文件句柄,如果文件不存在,则自动创建。然后我们通过log.New初始化日志处理器并赋值给logger,该方法需要传入日志文件、默认日志级别、以及日志格式,关于该方法的细节,我们后面在日志章节会详细介绍。

定义日志函数

然后我们就可以通过logger这个日志处理器来记录日志了,在helper.go中新增如下几个日志函数:

funcinfo(args...interface{}){logger.SetPrefix("INFO")logger.Println(args...)}//为什么不命名为error?避免和error类型重名funcdanger(args...interface{}){logger.SetPrefix("ERROR")logger.Println(args...)}funcwarning(args...interface{}){logger.SetPrefix("WARNING")logger.Println(args...)}

非常简单,我们定义了三个日志函数来记录三个日志级别,分别是INFO(普通)、ERROR(错误)、WARNING(警告),然后通过调用logger.Println传入参数记录日志信息到日志文件即可,这里的参数类型是...interface{},表示可以传入参数支持任意类型、任意个数。

重构业务代码

接下来,我们到业务处理器中,将原来的日志打印代码都重构为调用对应的日志函数,以handlers/auth.go为例,修改日志处理代码如下:

//src/github.

1
查看完整版本: 基于Go语言开发在线论坛六日志和