etcdhttp: use leveled logging

release-2.1
Xiang Li 2015-06-08 14:11:21 -07:00
parent e0d5116683
commit 0adeee2965
4 changed files with 29 additions and 29 deletions

View File

@ -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 {

View File

@ -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()

View File

@ -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)
} }

View File

@ -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)
} }
} }