Source File
http_handler.go
Belonging Package
go.uber.org/zap
// Copyright (c) 2016 Uber Technologies, Inc.//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this software and associated documentation files (the "Software"), to deal// in the Software without restriction, including without limitation the rights// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell// copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions://// The above copyright notice and this permission notice shall be included in// all copies or substantial portions of the Software.//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN// THE SOFTWARE.package zapimport ()// ServeHTTP is a simple JSON endpoint that can report on or change the current// logging level.//// # GET//// The GET request returns a JSON description of the current logging level like://// {"level":"info"}//// # PUT//// The PUT request changes the logging level. It is perfectly safe to change the// logging level while a program is running. Two content types are supported://// Content-Type: application/x-www-form-urlencoded//// With this content type, the level can be provided through the request body or// a query parameter. The log level is URL encoded like://// level=debug//// The request body takes precedence over the query parameter, if both are// specified.//// This content type is the default for a curl PUT request. Following are two// example curl requests that both set the logging level to debug.//// curl -X PUT localhost:8080/log/level?level=debug// curl -X PUT localhost:8080/log/level -d level=debug//// For any other content type, the payload is expected to be JSON encoded and// look like://// {"level":"info"}//// An example curl request could look like this://// curl -X PUT localhost:8080/log/level -H "Content-Type: application/json" -d '{"level":"debug"}'func ( AtomicLevel) ( http.ResponseWriter, *http.Request) {if := .serveHTTP(, ); != nil {.WriteHeader(http.StatusInternalServerError)fmt.Fprintf(, "internal error: %v", )}}func ( AtomicLevel) ( http.ResponseWriter, *http.Request) error {type struct {string `json:"error"`}type struct {zapcore.Level `json:"level"`}:= json.NewEncoder()switch .Method {case http.MethodGet:return .Encode({: .Level()})case http.MethodPut:, := decodePutRequest(.Header.Get("Content-Type"), )if != nil {.WriteHeader(http.StatusBadRequest)return .Encode({: .Error()})}.SetLevel()return .Encode({: .Level()})default:.WriteHeader(http.StatusMethodNotAllowed)return .Encode({: "Only GET and PUT are supported.",})}}// Decodes incoming PUT requests and returns the requested logging level.func ( string, *http.Request) (zapcore.Level, error) {if == "application/x-www-form-urlencoded" {return decodePutURL()}return decodePutJSON(.Body)}func ( *http.Request) (zapcore.Level, error) {:= .FormValue("level")if == "" {return 0, errors.New("must specify logging level")}var zapcore.Levelif := .UnmarshalText([]byte()); != nil {return 0,}return , nil}func ( io.Reader) (zapcore.Level, error) {var struct {*zapcore.Level `json:"level"`}if := json.NewDecoder().Decode(&); != nil {return 0, fmt.Errorf("malformed request body: %v", )}if . == nil {return 0, errors.New("must specify logging level")}return *., nil}
![]() |
The pages are generated with Golds v0.6.7. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |