使用案例
package main
import (
"go.uber.org/zap"
)
// 两种类型的日志记录器sugarlogger 和logger
var sugarlogger *zap.SugaredLogger
var logger *zap.Logger
func main() {
InitLogger()
defer sugarlogger.Sync()
sugarlogger.Info("sugerlogger:访问了sugerlogger")
logger.Info("logger:访问了sugerlogger")
}
func InitLogger() {
//logger = zap.NewExample() //测试环境
//{"level":"info","msg":"sugerlogger:访问了sugerlogger"}
//{"level":"info","msg":"logger:访问了sugerlogger"}
//logger, _ = zap.NewProduction() //用于生产环境
//{"level":"info","ts":1655276247.1967955,"caller":"zap/log.go:13","msg":"sugerlogger:访问了sugerlogger"}
//{"level":"info","ts":1655276247.1973336,"caller":"zap/log.go:14","msg":"logger:访问了sugerlogger"}
logger, _ = zap.NewDevelopment() //用户开发环境
//2022-06-15T14:58:40.060+0800 INFO zap/log.go:13 sugerlogger:访问了sugerlogger
//2022-06-15T14:58:40.076+0800 INFO zap/log.go:14 logger:访问了sugerlogger
sugarlogger = logger.Sugar()
}
自定义logger
将日志写入文件而不是终端
我们将使用 zap.new()方法配置
package mylog
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"os"
"path/filepath"
"time"
)
var logger *zap.Logger
var SugarLogger *zap.SugaredLogger
func init() {
encoder := getEncoder()
writerSyncer := getLogWriter()
core := zapcore.NewCore(encoder,writerSyncer,zapcore.DebugLevel)
logger = zap.New(core)
SugarLogger = logger.Sugar()
}
func getEncoder() zapcore.Encoder {
return zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
}
func getLogWriter() zapcore.WriteSyncer {
now := time.Now().Format("2006-01-02")
Path,_ := os.Getwd()
LogPath := Path + string(filepath.Separator) + "mylog" + string(filepath.Separator)+ "log" + string(filepath.Separator) + now
err := os.MkdirAll(LogPath, os.ModePerm)
if err != nil {
panic(err)
}
filePath := LogPath + string(filepath.Separator) + "log.txt"
file, err := os.OpenFile(filePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0775)
if err != nil {
panic(err)
}
return zapcore.AddSync(file)
}