diff --git a/etcdserver/etcdhttp/client.go b/etcdserver/etcdhttp/client.go index 4f185dbd2..e2ba80e43 100644 --- a/etcdserver/etcdhttp/client.go +++ b/etcdserver/etcdhttp/client.go @@ -20,7 +20,6 @@ import ( "expvar" "fmt" "io/ioutil" - "log" "net/http" "net/url" "path" @@ -147,7 +146,7 @@ func (h *keysHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { case resp.Event != nil: if err := writeKeyEvent(w, resp.Event, h.timer); err != nil { // Should never be reached - log.Printf("error writing event: %v", err) + plog.Errorf("error writing event (%v)", err) } case resp.Watcher != nil: 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()) w.Header().Set("Content-Type", "application/json") 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": id := h.server.Leader() @@ -208,7 +207,7 @@ func (h *membersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { m := newMember(h.cluster.Member(id)) w.Header().Set("Content-Type", "application/json") if err := json.NewEncoder(w).Encode(m); err != nil { - log.Printf("etcdhttp: %v", err) + plog.Warningf("failed to encode members response (%v)", err) } default: 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())) return 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) return } @@ -234,7 +233,7 @@ func (h *membersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusCreated) 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": 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: writeError(w, httptypes.NewHTTPError(http.StatusNotFound, fmt.Sprintf("No such member: %s", id))) 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) default: w.WriteHeader(http.StatusNoContent) @@ -273,7 +272,7 @@ func (h *membersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { case err == etcdserver.ErrIDNotFound: writeError(w, httptypes.NewHTTPError(http.StatusNotFound, fmt.Sprintf("No such member: %s", id))) 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) default: w.WriteHeader(http.StatusNoContent) @@ -379,7 +378,7 @@ func serveVersion(w http.ResponseWriter, r *http.Request, clusterV string) { b, err := json.Marshal(&vs) 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) } @@ -585,7 +584,7 @@ func handleKeyWatch(ctx context.Context, w http.ResponseWriter, wa store.Watcher ev = trimEventPrefix(ev, etcdserver.StoreKeysPrefix) if err := json.NewEncoder(w).Encode(ev); err != nil { // Should never be reached - log.Printf("error writing event: %v\n", err) + plog.Warningf("error writing event (%v)", err) return } if !stream { diff --git a/etcdserver/etcdhttp/client_security.go b/etcdserver/etcdhttp/client_security.go index 0bbf1a6c4..0f217abbf 100644 --- a/etcdserver/etcdhttp/client_security.go +++ b/etcdserver/etcdhttp/client_security.go @@ -16,7 +16,6 @@ package etcdhttp import ( "encoding/json" - "log" "net/http" "path" "strings" @@ -57,7 +56,7 @@ func hasRootAccess(sec *security.Store, r *http.Request) bool { } ok = rootUser.CheckPassword(password) if !ok { - log.Printf("security: Wrong password for user %s", username) + plog.Warningf("security: wrong password for user %s", username) return false } for _, role := range rootUser.Roles { @@ -65,7 +64,7 @@ func hasRootAccess(sec *security.Store, r *http.Request) bool { 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 } @@ -83,12 +82,12 @@ func hasKeyPrefixAccess(sec *security.Store, r *http.Request, key string, recurs } user, err := sec.GetUser(username) if err != nil { - log.Printf("security: No such user: %s.", username) + plog.Warningf("security: no such user: %s.", username) return false } authAsUser := user.CheckPassword(password) if !authAsUser { - log.Printf("security: Incorrect password for user: %s.", username) + plog.Warningf("security: incorrect password for user: %s.", username) return false } 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) } - 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 } @@ -115,7 +114,7 @@ func hasGuestAccess(sec *security.Store, r *http.Request, key string) bool { if role.HasKeyAccess(key, writeAccess) { 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 } @@ -157,7 +156,7 @@ func (sh *securityHandler) baseRoles(w http.ResponseWriter, r *http.Request) { rolesCollections.Roles = roles err = json.NewEncoder(w).Encode(rolesCollections) 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) if err != nil { - log.Println("etcdhttp: forRole error encoding on", r.URL) + plog.Warningf("forRole error encoding on %s", r.URL) return } return @@ -224,7 +223,7 @@ func (sh *securityHandler) forRole(w http.ResponseWriter, r *http.Request, role } err = json.NewEncoder(w).Encode(newrole) if err != nil { - log.Println("etcdhttp: forRole error encoding on", r.URL) + plog.Warningf("forRole error encoding on %s", r.URL) return } return @@ -262,7 +261,7 @@ func (sh *securityHandler) baseUsers(w http.ResponseWriter, r *http.Request) { usersCollections.Users = users err = json.NewEncoder(w).Encode(usersCollections) 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) if err != nil { - log.Println("etcdhttp: forUser error encoding on", r.URL) + plog.Warningf("forUser error encoding on %s", r.URL) return } return @@ -335,7 +334,7 @@ func (sh *securityHandler) forUser(w http.ResponseWriter, r *http.Request, user } err = json.NewEncoder(w).Encode(newuser) if err != nil { - log.Println("etcdhttp: forUser error encoding on", r.URL) + plog.Warningf("forUser error encoding on %s", r.URL) return } return @@ -368,7 +367,7 @@ func (sh *securityHandler) enableDisable(w http.ResponseWriter, r *http.Request) jsonDict := enabled{isEnabled} err := json.NewEncoder(w).Encode(jsonDict) 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": err := sh.sec.EnableSecurity() diff --git a/etcdserver/etcdhttp/http.go b/etcdserver/etcdhttp/http.go index d376763a8..e86615a50 100644 --- a/etcdserver/etcdhttp/http.go +++ b/etcdserver/etcdhttp/http.go @@ -16,12 +16,12 @@ package etcdhttp import ( "errors" - "log" "math" "net/http" "strings" "time" + "github.com/coreos/etcd/Godeps/_workspace/src/github.com/coreos/pkg/capnslog" etcdErr "github.com/coreos/etcd/error" "github.com/coreos/etcd/etcdserver/etcdhttp/httptypes" "github.com/coreos/etcd/etcdserver/security" @@ -38,7 +38,10 @@ const ( 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 // 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.WriteTo(w) 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.WriteTo(w) } diff --git a/etcdserver/etcdhttp/peer.go b/etcdserver/etcdhttp/peer.go index b7df13d4d..756b6baf7 100644 --- a/etcdserver/etcdhttp/peer.go +++ b/etcdserver/etcdhttp/peer.go @@ -16,7 +16,6 @@ package etcdhttp import ( "encoding/json" - "log" "net/http" "github.com/coreos/etcd/etcdserver" @@ -59,6 +58,6 @@ func (h *peerMembersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { ms := h.cluster.Members() w.Header().Set("Content-Type", "application/json") if err := json.NewEncoder(w).Encode(ms); err != nil { - log.Printf("etcdhttp: %v", err) + plog.Warningf("failed to encode members response (%v)", err) } }