记录和管理 API 日志

本节核心内容

  • Go 日志包数量众多,功能不同、性能不同,本教程介绍一个笔者认为比较好的日志库,并给出原因
  • 介绍如何初始化日志包
  • 介绍如何调用日志包
  • 介绍如何转存(rotate)日志文件

日志包介绍

apiserver 所采用的日志包 lexkong/log 是笔者根据开发经验,并调研 GitHub 上的 开源log 包后封装的一个日志包,也是笔者所在项目使用的日志包。它参考华为 paas-lager,做了一些便捷性的改动,功能完全一样,只不过更为便捷。相较于 Go 的其他日志包,该日志包有如下特点:

  • 支持日志输出流配置,可以输出到 stdout 或 file,也可以同时输出到 stdout 和 file
  • 支持输出为 JSON 或 plaintext 格式
  • 支持彩色输出
  • 支持 log rotate 功能
  • 高性能

初始化日志包

conf/config.yaml
config/config.go
c.initLog()
c.initConfig()
func (c *Config) initLog()
writerslogger_filelogger_levellogger_filelog_format_texttruefalserollingPolicylog_rotate_daterollingPolicy: dailylog_rotate_sizerollingPolicy: sizelog_backup_count

调用日志包

日志初始化好了,将 demo02 中的 log 用 lexkong/log 包来替换。替换前(这里 grep 出了需要替换的行,读者可自行确认替换后的效果):

替换后的源码文件见 demo03。

编译并运行

  1. 下载 apiserver_demos 源码包(如前面已经下载过,请忽略此步骤)
apiserver_demos/demo03$GOPATH/src/apiserver
  1. 在 apiserver 目录下编译源码
  1. 启动 apiserver

启动后,可以看到 apiserver 有 JSON 格式的日志输出:

管理日志文件

size
main

启动 apiserver 后发现,在当前目录下创建了 log/apiserver.log 日志文件:

$ ls log/apiserver.log

程序运行一段时间后,发现又创建了 zip 文件:

$ ls log/apiserver.log  apiserver.log.20180531134509631.zip

该 zip 文件就是当 apiserver.log 大小超过 1MB 后,日志系统将之前的日志压缩成 zip 文件后的文件。

小结

本小节通过具体实例讲解了如何配置、使用和管理日志。

本系列文章转载自公众号:腾讯游戏存储与计算技术 微信号: game_infra