目标功能:
根据日志级别进行不同文件存储
将error以下级别添加到info.log文件中
将error及以上添加到error.log文件中

下载: go get -u go.uber.org/zap

 

 


func main() {
	logger,err  := getLogger("D:/log/info.log","D:/log/error.log")
	if err != nil {
		log.Fatal(err)
	}

	logger.Debug("i am debug",zap.String("key","debug"))
	logger.Info("i am info",zap.String("key","info"))
	logger.Error("i am error",zap.String("key","error"))
}

func getLogger(infoPath,errorPath string)  (*zap.Logger,error) {
	highPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool{
		return lev >= zap.ErrorLevel
	})

	lowPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
		return lev < zap.ErrorLevel && lev >= zap.DebugLevel
	})


	prodEncoder := zap.NewProductionEncoderConfig()
	prodEncoder.EncodeTime = zapcore.ISO8601TimeEncoder


	lowWriteSyncer,lowClose,err :=  zap.Open(infoPath)
	if err != nil {
		lowClose()
		return nil,err
	}


	highWriteSyncer,highClose,err :=  zap.Open(errorPath)
	if err != nil {
		highClose()
		return nil,err
	}

	highCore := zapcore.NewCore(zapcore.NewJSONEncoder(prodEncoder),highWriteSyncer,highPriority)
	lowCore := zapcore.NewCore(zapcore.NewJSONEncoder(prodEncoder),lowWriteSyncer,lowPriority)


	return  zap.New(zapcore.NewTee(highCore,lowCore),zap.AddCaller()),nil
}