七叶笔记 » golang编程 » Go Web 框架 Gin 实践6—编写一个简单的文件日志

Go Web 框架 Gin 实践6—编写一个简单的文件日志

在上一节 中,我们解决了API’s可以任意访问的问题,那么我们现在还有一个问题。

就是我们的日志,都是输出到控制台上的,这显然对于一个项目来说是不合理的,因此我们这一节简单封装log库,使其支持简单的文件日志!

项目地址:


新建logging包

我们在pkg下新建logging目录,新建file.go和log.go文件,写入内容:

编写file文件

1、 file.go:

  • os.Stat:返回文件信息结构描述文件。如果出现错误,会返回*PathError
type PathError struct {
 Op string
 Path string
 Err error
}
 
  • os.IsNotExist:能够接受ErrNotExist、syscall的一些错误,它会返回一个 布尔值 ,能够得知文件不存在或目录不存在
  • os.IsPermission:能够接受ErrPermission、syscall的一些错误,它会返回一个布尔值,能够得知权限是否满足
  • os.OpenFile:调用文件,支持传入文件名称、指定的模式调用文件、文件权限,返回的文件的方法可以用于I/O。如果出现错误,则为*PathError。

  • os.Getwd:返回与当前目录对应的根路径名
  • os.MkdirAll:创建对应的目录以及所需的子目录,若成功则返回nil,否则返回error
  • os.ModePerm:const定义ModePerm FileMode = 0777

编写 log文件

2、 log.go

log.New:创建一个新的日志记录器。out定义要写入日志数据的IO 句柄 。prefix定义每个生成的日志行的开头。flag定义了日志记录属性

func New(out io.Writer, prefix string, flag int) *Logger {
 return &Logger{out: out, prefix: prefix, flag: flag}
}
 
  • log.LstdFlags:日志记录的格式属性之一,其余的选项如下

当前目录结构:

我们自定义的logging包,已经基本完成了,接下来让它接入到我们的项目之中吧!

我们打开先前包含log包的代码,

  1. 打开routers目录下的article.go、tag.go、auth.go
  2. 将log包的引用删除,修改引用我们自己的日志包为gin-blog/pkg/logging
  3. 将原本的log.Println(…)改为logging.Info(…)

例如auth.go文件的修改内容:

验证功能

修改文件后,重启服务,我们来试试吧!

获取到API的Token后,我们故意传错误URL参数给接口,如:

然后我们到$GOPATH/gin-blog/runtime/logs查看日志:

日志结构一切正常,我们的记录模式都为Info,因此前缀是对的,并且我们是入参有问题,也把错误记录下来了,这样排错就很方便了!

至此,本节就完成了,这只是一个简单的扩展,实际上我们线上项目要使用的文件日志,是更复杂一些,开动你的大脑 举一反三吧!

参考

本系列示例代码

  • go-gin-example

相关文章