Sugar:给 Go 项目的日志打印工具加点糖

sugar

English README

Sugar 封装了 zap
日志库,让开发者能够更方便、快捷地使用这个插件。
本库只是简单的封装,如果使用过程中遇到问题,推荐阅读 zap
的相关文档寻找答案。
当然,欢迎大家提 issue 来一起完善这个仓库。

一些注意点

zap.NewDevelopmentConfig()
InitDevelopmentSugar()

方法

Sugar 封装了 sugared-zap 的所有方法,如下(如果有疏漏,可以提 issue 通知我):

  • Debug/Debugf
  • Info/Infof
  • Warn/Warnf
  • Error/Errorf
  • Fatal/Fatalf
  • Panic/Panicf

logs 格式预先看

我之所以喜欢使用 zap,主要因为它漂亮的输出格式(根据官方的描述,它的输出效率也很高,不过我还没有遇到这个瓶颈)

默认的开发模式

这种模式的输出是 console 样式,就是说日志平铺展示(开发模式也可以配置 json 格式的输出,见。

2019-06-10T09:13:03.672+0800    DEBUG   default/main.go:7       default development sugar of chalvern   {"unit": "main"}
2019-06-10T09:13:03.672+0800    INFO    default/main.go:20      log of myCustomLogger info      {"unit": "my_custom_logger"}
2019-06-10T09:13:03.672+0800    WARN    default/main.go:21      log of myCustomLogger warn      {"unit": "my_custom_logger"}
github.com/chalvern/sugar.(*Logger).Warn
        /Users/Chalvern/developer/golang/src/github.com/chalvern/sugar/logger.go:51
main.myCustomLogger
        /Users/Chalvern/developer/golang/src/github.com/chalvern/sugar/examples/default/main.go:21
main.main
        /Users/Chalvern/developer/golang/src/github.com/chalvern/sugar/examples/default/main.go:8
runtime.main
        /usr/local/go/src/runtime/proc.go:200
2019-06-10T09:13:03.672+0800    INFO    default/main.go:26      log of myCustomLogger2 info     {"unit": "my_custom_logger_2"}
2019-06-10T09:13:03.672+0800    WARN    default/main.go:27      log of myCustomLogger2 warn     {"unit": "my_custom_logger_2"}
github.com/chalvern/sugar.(*Logger).Warn
        /Users/Chalvern/developer/golang/src/github.com/chalvern/sugar/logger.go:51
main.myCustomLogger2
        /Users/Chalvern/developer/golang/src/github.com/chalvern/sugar/examples/default/main.go:27
main.main
        /Users/Chalvern/developer/golang/src/github.com/chalvern/sugar/examples/default/main.go:9
runtime.main
        /usr/local/go/src/runtime/proc.go:200

looking #2

生产模式默认是 json 格式的输出,从而方便把日志收集起来集中处理。

{"level":"info","ts":1560129183.672966,"caller":"default/main.go:13","msg":"default production sugar of chalvern","unit":"main"}
{"level":"info","ts":1560129183.673015,"caller":"default/main.go:20","msg":"log of myCustomLogger info","unit":"my_custom_logger"}
{"level":"warn","ts":1560129183.6730392,"caller":"default/main.go:21","msg":"log of myCustomLogger warn","unit":"my_custom_logger"}
{"level":"info","ts":1560129183.673059,"caller":"default/main.go:26","msg":"log of myCustomLogger2 info","unit":"my_custom_logger_2"}
{"level":"warn","ts":1560129183.673182,"caller":"default/main.go:27","msg":"log of myCustomLogger2 warn","unit":"my_custom_logger_2"}

例子

下面的例子也可以在 examples
目录找到。

默认配置

// cat ./examples/default/main.go
package main

import "github.com/chalvern/sugar"

func main() {

    sugar.Debug("default development sugar of chalvern")
    myCustomLogger()
    myCustomLogger2()

    sugar.InitProductionSugar()
    sugar.Debug("should not be printed")
    sugar.Info("default production sugar of chalvern")
    myCustomLogger()
    myCustomLogger2()
}

func myCustomLogger() {
    myLogger := sugar.NewLoggerOf("my_custom_logger")
    myLogger.Info("log of myCustomLogger info")
    myLogger.Warn("log of myCustomLogger warn")
}

func myCustomLogger2() {
    myLogger := sugar.NewLoggerOf("my_custom_logger_2")
    myLogger.Info("log of myCustomLogger2 info")
    myLogger.Warn("log of myCustomLogger2 warn")
}

定制化配置

package main

import (
    "github.com/chalvern/sugar"
    "go.uber.org/zap"
)

func main() {
    config := zap.NewProductionConfig()
    config.OutputPaths = []string{"./production.log"}
    config.ErrorOutputPaths = []string{"./production_err.log"}
    sugar.SetSugar(&config)

    sugar.Info("main info")

    myCustomLogger()
}

func myCustomLogger() {
    myLogger := sugar.NewLoggerOf("my_custom_logger")
    myLogger.Info("log of myCustomLogger info")
    myLogger.Warn("log of myCustomLogger warn")
}