// 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 (lvl AtomicLevel) ServeHTTP(w http.ResponseWriter, r *http.Request) { … } func (lvl AtomicLevel) serveHTTP(w http.ResponseWriter, r *http.Request) error { … } // Decodes incoming PUT requests and returns the requested logging level. func decodePutRequest(contentType string, r *http.Request) (zapcore.Level, error) { … } func decodePutURL(r *http.Request) (zapcore.Level, error) { … } func decodePutJSON(body io.Reader) (zapcore.Level, error) { … }