Browse Source

etcdhttp: use leveled logging

Xiang Li 10 years ago
parent
commit
0adeee2965

+ 9 - 10
etcdserver/etcdhttp/client.go

@@ -20,7 +20,6 @@ import (
 	"expvar"
 	"expvar"
 	"fmt"
 	"fmt"
 	"io/ioutil"
 	"io/ioutil"
-	"log"
 	"net/http"
 	"net/http"
 	"net/url"
 	"net/url"
 	"path"
 	"path"
@@ -147,7 +146,7 @@ func (h *keysHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	case resp.Event != nil:
 	case resp.Event != nil:
 		if err := writeKeyEvent(w, resp.Event, h.timer); err != nil {
 		if err := writeKeyEvent(w, resp.Event, h.timer); err != nil {
 			// Should never be reached
 			// Should never be reached
-			log.Printf("error writing event: %v", err)
+			plog.Errorf("error writing event (%v)", err)
 		}
 		}
 	case resp.Watcher != nil:
 	case resp.Watcher != nil:
 		ctx, cancel := context.WithTimeout(context.Background(), defaultWatchTimeout)
 		ctx, cancel := context.WithTimeout(context.Background(), defaultWatchTimeout)
@@ -197,7 +196,7 @@ func (h *membersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 			mc := newMemberCollection(h.cluster.Members())
 			mc := newMemberCollection(h.cluster.Members())
 			w.Header().Set("Content-Type", "application/json")
 			w.Header().Set("Content-Type", "application/json")
 			if err := json.NewEncoder(w).Encode(mc); err != nil {
 			if err := json.NewEncoder(w).Encode(mc); err != nil {
-				log.Printf("etcdhttp: %v", err)
+				plog.Warningf("failed to encode members response (%v)", err)
 			}
 			}
 		case "leader":
 		case "leader":
 			id := h.server.Leader()
 			id := h.server.Leader()
@@ -208,7 +207,7 @@ func (h *membersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 			m := newMember(h.cluster.Member(id))
 			m := newMember(h.cluster.Member(id))
 			w.Header().Set("Content-Type", "application/json")
 			w.Header().Set("Content-Type", "application/json")
 			if err := json.NewEncoder(w).Encode(m); err != nil {
 			if err := json.NewEncoder(w).Encode(m); err != nil {
-				log.Printf("etcdhttp: %v", err)
+				plog.Warningf("failed to encode members response (%v)", err)
 			}
 			}
 		default:
 		default:
 			writeError(w, httptypes.NewHTTPError(http.StatusNotFound, "Not found"))
 			writeError(w, httptypes.NewHTTPError(http.StatusNotFound, "Not found"))
@@ -226,7 +225,7 @@ func (h *membersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 			writeError(w, httptypes.NewHTTPError(http.StatusConflict, err.Error()))
 			writeError(w, httptypes.NewHTTPError(http.StatusConflict, err.Error()))
 			return
 			return
 		case err != nil:
 		case err != nil:
-			log.Printf("etcdhttp: error adding node %s: %v", m.ID, err)
+			plog.Errorf("error adding member %s (%v)", m.ID, err)
 			writeError(w, err)
 			writeError(w, err)
 			return
 			return
 		}
 		}
@@ -234,7 +233,7 @@ func (h *membersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 		w.Header().Set("Content-Type", "application/json")
 		w.Header().Set("Content-Type", "application/json")
 		w.WriteHeader(http.StatusCreated)
 		w.WriteHeader(http.StatusCreated)
 		if err := json.NewEncoder(w).Encode(res); err != nil {
 		if err := json.NewEncoder(w).Encode(res); err != nil {
-			log.Printf("etcdhttp: %v", err)
+			plog.Warningf("failed to encode members response (%v)", err)
 		}
 		}
 	case "DELETE":
 	case "DELETE":
 		id, ok := getID(r.URL.Path, w)
 		id, ok := getID(r.URL.Path, w)
@@ -248,7 +247,7 @@ func (h *membersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 		case err == etcdserver.ErrIDNotFound:
 		case err == etcdserver.ErrIDNotFound:
 			writeError(w, httptypes.NewHTTPError(http.StatusNotFound, fmt.Sprintf("No such member: %s", id)))
 			writeError(w, httptypes.NewHTTPError(http.StatusNotFound, fmt.Sprintf("No such member: %s", id)))
 		case err != nil:
 		case err != nil:
-			log.Printf("etcdhttp: error removing node %s: %v", id, err)
+			plog.Errorf("error removing member %s (%v)", id, err)
 			writeError(w, err)
 			writeError(w, err)
 		default:
 		default:
 			w.WriteHeader(http.StatusNoContent)
 			w.WriteHeader(http.StatusNoContent)
@@ -273,7 +272,7 @@ func (h *membersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 		case err == etcdserver.ErrIDNotFound:
 		case err == etcdserver.ErrIDNotFound:
 			writeError(w, httptypes.NewHTTPError(http.StatusNotFound, fmt.Sprintf("No such member: %s", id)))
 			writeError(w, httptypes.NewHTTPError(http.StatusNotFound, fmt.Sprintf("No such member: %s", id)))
 		case err != nil:
 		case err != nil:
-			log.Printf("etcdhttp: error updating node %s: %v", m.ID, err)
+			plog.Errorf("error updating member %s (%v)", m.ID, err)
 			writeError(w, err)
 			writeError(w, err)
 		default:
 		default:
 			w.WriteHeader(http.StatusNoContent)
 			w.WriteHeader(http.StatusNoContent)
@@ -379,7 +378,7 @@ func serveVersion(w http.ResponseWriter, r *http.Request, clusterV string) {
 
 
 	b, err := json.Marshal(&vs)
 	b, err := json.Marshal(&vs)
 	if err != nil {
 	if err != nil {
-		log.Panicf("version: cannot marshal versions to json (%v)", err)
+		plog.Panicf("cannot marshal versions to json (%v)", err)
 	}
 	}
 	w.Write(b)
 	w.Write(b)
 }
 }
@@ -585,7 +584,7 @@ func handleKeyWatch(ctx context.Context, w http.ResponseWriter, wa store.Watcher
 			ev = trimEventPrefix(ev, etcdserver.StoreKeysPrefix)
 			ev = trimEventPrefix(ev, etcdserver.StoreKeysPrefix)
 			if err := json.NewEncoder(w).Encode(ev); err != nil {
 			if err := json.NewEncoder(w).Encode(ev); err != nil {
 				// Should never be reached
 				// Should never be reached
-				log.Printf("error writing event: %v\n", err)
+				plog.Warningf("error writing event (%v)", err)
 				return
 				return
 			}
 			}
 			if !stream {
 			if !stream {

+ 13 - 14
etcdserver/etcdhttp/client_security.go

@@ -16,7 +16,6 @@ package etcdhttp
 
 
 import (
 import (
 	"encoding/json"
 	"encoding/json"
-	"log"
 	"net/http"
 	"net/http"
 	"path"
 	"path"
 	"strings"
 	"strings"
@@ -57,7 +56,7 @@ func hasRootAccess(sec *security.Store, r *http.Request) bool {
 	}
 	}
 	ok = rootUser.CheckPassword(password)
 	ok = rootUser.CheckPassword(password)
 	if !ok {
 	if !ok {
-		log.Printf("security: Wrong password for user %s", username)
+		plog.Warningf("security: wrong password for user %s", username)
 		return false
 		return false
 	}
 	}
 	for _, role := range rootUser.Roles {
 	for _, role := range rootUser.Roles {
@@ -65,7 +64,7 @@ func hasRootAccess(sec *security.Store, r *http.Request) bool {
 			return true
 			return true
 		}
 		}
 	}
 	}
-	log.Printf("security: User %s does not have the %s role for resource %s.", username, security.RootRoleName, r.URL.Path)
+	plog.Warningf("security: user %s does not have the %s role for resource %s.", username, security.RootRoleName, r.URL.Path)
 	return false
 	return false
 }
 }
 
 
@@ -83,12 +82,12 @@ func hasKeyPrefixAccess(sec *security.Store, r *http.Request, key string, recurs
 	}
 	}
 	user, err := sec.GetUser(username)
 	user, err := sec.GetUser(username)
 	if err != nil {
 	if err != nil {
-		log.Printf("security: No such user: %s.", username)
+		plog.Warningf("security: no such user: %s.", username)
 		return false
 		return false
 	}
 	}
 	authAsUser := user.CheckPassword(password)
 	authAsUser := user.CheckPassword(password)
 	if !authAsUser {
 	if !authAsUser {
-		log.Printf("security: Incorrect password for user: %s.", username)
+		plog.Warningf("security: incorrect password for user: %s.", username)
 		return false
 		return false
 	}
 	}
 	writeAccess := r.Method != "GET" && r.Method != "HEAD"
 	writeAccess := r.Method != "GET" && r.Method != "HEAD"
@@ -102,7 +101,7 @@ func hasKeyPrefixAccess(sec *security.Store, r *http.Request, key string, recurs
 		}
 		}
 		return role.HasKeyAccess(key, writeAccess)
 		return role.HasKeyAccess(key, writeAccess)
 	}
 	}
-	log.Printf("security: Invalid access for user %s on key %s.", username, key)
+	plog.Warningf("security: invalid access for user %s on key %s.", username, key)
 	return false
 	return false
 }
 }
 
 
@@ -115,7 +114,7 @@ func hasGuestAccess(sec *security.Store, r *http.Request, key string) bool {
 	if role.HasKeyAccess(key, writeAccess) {
 	if role.HasKeyAccess(key, writeAccess) {
 		return true
 		return true
 	}
 	}
-	log.Printf("security: Invalid access for unauthenticated user on resource %s.", key)
+	plog.Warningf("security: invalid access for unauthenticated user on resource %s.", key)
 	return false
 	return false
 }
 }
 
 
@@ -157,7 +156,7 @@ func (sh *securityHandler) baseRoles(w http.ResponseWriter, r *http.Request) {
 	rolesCollections.Roles = roles
 	rolesCollections.Roles = roles
 	err = json.NewEncoder(w).Encode(rolesCollections)
 	err = json.NewEncoder(w).Encode(rolesCollections)
 	if err != nil {
 	if err != nil {
-		log.Println("etcdhttp: baseRoles error encoding on", r.URL)
+		plog.Warningf("baseRoles error encoding on %s", r.URL)
 	}
 	}
 }
 }
 
 
@@ -197,7 +196,7 @@ func (sh *securityHandler) forRole(w http.ResponseWriter, r *http.Request, role
 		}
 		}
 		err = json.NewEncoder(w).Encode(data)
 		err = json.NewEncoder(w).Encode(data)
 		if err != nil {
 		if err != nil {
-			log.Println("etcdhttp: forRole error encoding on", r.URL)
+			plog.Warningf("forRole error encoding on %s", r.URL)
 			return
 			return
 		}
 		}
 		return
 		return
@@ -224,7 +223,7 @@ func (sh *securityHandler) forRole(w http.ResponseWriter, r *http.Request, role
 		}
 		}
 		err = json.NewEncoder(w).Encode(newrole)
 		err = json.NewEncoder(w).Encode(newrole)
 		if err != nil {
 		if err != nil {
-			log.Println("etcdhttp: forRole error encoding on", r.URL)
+			plog.Warningf("forRole error encoding on %s", r.URL)
 			return
 			return
 		}
 		}
 		return
 		return
@@ -262,7 +261,7 @@ func (sh *securityHandler) baseUsers(w http.ResponseWriter, r *http.Request) {
 	usersCollections.Users = users
 	usersCollections.Users = users
 	err = json.NewEncoder(w).Encode(usersCollections)
 	err = json.NewEncoder(w).Encode(usersCollections)
 	if err != nil {
 	if err != nil {
-		log.Println("etcdhttp: baseUsers error encoding on", r.URL)
+		plog.Warningf("baseUsers error encoding on %s", r.URL)
 	}
 	}
 }
 }
 
 
@@ -304,7 +303,7 @@ func (sh *securityHandler) forUser(w http.ResponseWriter, r *http.Request, user
 
 
 		err = json.NewEncoder(w).Encode(u)
 		err = json.NewEncoder(w).Encode(u)
 		if err != nil {
 		if err != nil {
-			log.Println("etcdhttp: forUser error encoding on", r.URL)
+			plog.Warningf("forUser error encoding on %s", r.URL)
 			return
 			return
 		}
 		}
 		return
 		return
@@ -335,7 +334,7 @@ func (sh *securityHandler) forUser(w http.ResponseWriter, r *http.Request, user
 		}
 		}
 		err = json.NewEncoder(w).Encode(newuser)
 		err = json.NewEncoder(w).Encode(newuser)
 		if err != nil {
 		if err != nil {
-			log.Println("etcdhttp: forUser error encoding on", r.URL)
+			plog.Warningf("forUser error encoding on %s", r.URL)
 			return
 			return
 		}
 		}
 		return
 		return
@@ -368,7 +367,7 @@ func (sh *securityHandler) enableDisable(w http.ResponseWriter, r *http.Request)
 		jsonDict := enabled{isEnabled}
 		jsonDict := enabled{isEnabled}
 		err := json.NewEncoder(w).Encode(jsonDict)
 		err := json.NewEncoder(w).Encode(jsonDict)
 		if err != nil {
 		if err != nil {
-			log.Println("etcdhttp: error encoding security state on", r.URL)
+			plog.Warningf("error encoding security state on %s", r.URL)
 		}
 		}
 	case "PUT":
 	case "PUT":
 		err := sh.sec.EnableSecurity()
 		err := sh.sec.EnableSecurity()

+ 6 - 3
etcdserver/etcdhttp/http.go

@@ -16,12 +16,12 @@ package etcdhttp
 
 
 import (
 import (
 	"errors"
 	"errors"
-	"log"
 	"math"
 	"math"
 	"net/http"
 	"net/http"
 	"strings"
 	"strings"
 	"time"
 	"time"
 
 
+	"github.com/coreos/etcd/Godeps/_workspace/src/github.com/coreos/pkg/capnslog"
 	etcdErr "github.com/coreos/etcd/error"
 	etcdErr "github.com/coreos/etcd/error"
 	"github.com/coreos/etcd/etcdserver/etcdhttp/httptypes"
 	"github.com/coreos/etcd/etcdserver/etcdhttp/httptypes"
 	"github.com/coreos/etcd/etcdserver/security"
 	"github.com/coreos/etcd/etcdserver/security"
@@ -38,7 +38,10 @@ const (
 	defaultWatchTimeout = time.Duration(math.MaxInt64)
 	defaultWatchTimeout = time.Duration(math.MaxInt64)
 )
 )
 
 
-var errClosed = errors.New("etcdhttp: client closed connection")
+var (
+	plog      = capnslog.NewPackageLogger("github.com/coreos/etcd", "etcdhttp")
+	errClosed = errors.New("etcdhttp: client closed connection")
+)
 
 
 // writeError logs and writes the given Error to the ResponseWriter
 // writeError logs and writes the given Error to the ResponseWriter
 // If Error is an etcdErr, it is rendered to the ResponseWriter
 // If Error is an etcdErr, it is rendered to the ResponseWriter
@@ -56,7 +59,7 @@ func writeError(w http.ResponseWriter, err error) {
 		herr := httptypes.NewHTTPError(http.StatusBadRequest, e.Error())
 		herr := httptypes.NewHTTPError(http.StatusBadRequest, e.Error())
 		herr.WriteTo(w)
 		herr.WriteTo(w)
 	default:
 	default:
-		log.Printf("etcdhttp: unexpected error: %v", err)
+		plog.Errorf("got unexpected response error (%v)", err)
 		herr := httptypes.NewHTTPError(http.StatusInternalServerError, "Internal Server Error")
 		herr := httptypes.NewHTTPError(http.StatusInternalServerError, "Internal Server Error")
 		herr.WriteTo(w)
 		herr.WriteTo(w)
 	}
 	}

+ 1 - 2
etcdserver/etcdhttp/peer.go

@@ -16,7 +16,6 @@ package etcdhttp
 
 
 import (
 import (
 	"encoding/json"
 	"encoding/json"
-	"log"
 	"net/http"
 	"net/http"
 
 
 	"github.com/coreos/etcd/etcdserver"
 	"github.com/coreos/etcd/etcdserver"
@@ -59,6 +58,6 @@ func (h *peerMembersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	ms := h.cluster.Members()
 	ms := h.cluster.Members()
 	w.Header().Set("Content-Type", "application/json")
 	w.Header().Set("Content-Type", "application/json")
 	if err := json.NewEncoder(w).Encode(ms); err != nil {
 	if err := json.NewEncoder(w).Encode(ms); err != nil {
-		log.Printf("etcdhttp: %v", err)
+		plog.Warningf("failed to encode members response (%v)", err)
 	}
 	}
 }
 }