Log
使用CircleCI
进程CI Pipeline校验,Go Report Card
进行Golang项目代码分析
- CircleCI: https://circleci.com/gh/chenguolin/golog/tree/master
- Go Report Card: https://goreportcard.com/report/github.com/chenguolin/golog
golog 是一个golang 日志框架,内部使用uber开源的zap框架, 性能好灵活性高。
- 支持不同log级别输出
- 支持不同io.Writer输出
- 支持HTTP Service Access Log定制输出
- 支持输出到文件并按固定格式切割文件
Sample
// use 1
// 默认level为Info
// 默认使用JSONEncoder
// 默认输出到Stdout
log.Info("use 1", log.String("name", "chenguolin"))
// use 2
// level设置为Info
// 使用Console Encodr
// 输出到Stderr
logger, err := log.NewLogger(log.WithInfoLevel(), log.WithConsoleEncoder(), log.WithOutput(os.Stderr))
if err != nil {
panic(err)
}
log.SetLogger(logger)
log.Info("use 2", log.String("name", "chenguolin"))
AccessLog
// set logger
fileName := os.Getenv("GOPATH") + "/src/gitlab.local.com/log/sample/access.log"
f, err := os.OpenFile(fileName, os.O_RDWR|os.O_APPEND, 0660)
if err != nil {
fmt.Printf("open file error", err)
}
defer f.Close()
logger, err := log.NewLogger(log.WithOutput(io.Writer(f)), log.WithJSONEncoder(), log.WithInfoLevel())
if err != nil {
fmt.Printf("log NewLogger error", err)
}
// start gin HTTP server
r := gin.New()
r.GET("/ping", log.AccessLogFunc(log), HelloServer)
// listen and serve on 0.0.0.0:8899
r.Run(":8899")
RotateWriter
// new rotate writer
fileName := os.Getenv("GOPATH") + "/src/gitlab.local.com/log/sample/access.log"
// 按小时切割
writer, err := log.NewRotateWriter(fileName, "20060102-15")
if err != nil {
fmt.Println("log NewRotateWriter error", err)
}
// new logger
logger, err := log.NewLogger(log.WithOutput(writer), log.WithJSONEncoder(), log.WithInfoLevel())
if err != nil {
fmt.Printf("log NewLogger error", err)
}
// start gin HTTP server
r := gin.New()
r.GET("/ping", log.AccessLogFunc(log), HelloServer)
// listen and serve on 0.0.0.0:8899
r.Run(":8899")
CI Workflow Check
gocyclo
: 校验代码复杂度
gofmt
: 校验代码是否都已经格式化
golint
: 校验代码风格规范是否按照指定标准
gosimple
: 校验代码是否可以简化
govet
: 代码静态校验
misspell
: 校验是否有英文单词拼写错误
unused
: 校验是否有未使用变量、常量、函数、结构体等
gotest
: 单元测试校验
Gitlab CI
如果使用Gitlab,也可以通过.gitlab-ci.yml
运行Gitlab CI Pipeline,详细介绍请参考下面2篇文章
- Gitlab 安装使用
- Gitlab CI和CD配置