update error handlers

This commit is contained in:
Hayden 2022-08-30 16:40:27 -08:00
parent 93a4a816f9
commit 9501eb398a
4 changed files with 25 additions and 16 deletions

View file

@ -11,6 +11,10 @@ import (
type Level int8
var (
IncludeTrace = false
)
const (
LevelDebug Level = iota
LevelInfo
@ -88,9 +92,13 @@ func (l *Logger) print(level Level, message string, properties map[string]string
}
// Include a stack trace for entries at the ERROR and FATAL levels.
dumpTrace := false
if level >= LevelError {
dumpTrace = true
if IncludeTrace {
aux.Trace = string(debug.Stack())
}
}
// Declare a line variable for holding the actual log entry text.
var line []byte
@ -109,8 +117,11 @@ func (l *Logger) print(level Level, message string, properties map[string]string
l.mu.Lock()
defer l.mu.Unlock()
// Write the log entry followed by a newline.
return l.out.Write(append(line, '\n'))
n, err := l.out.Write(line)
if dumpTrace {
l.out.Write(debug.Stack())
}
return n, err
}
// We also implement a Write() method on our Logger type so that it satisfies the

View file

@ -4,4 +4,5 @@ const (
ContentType = "Content-Type"
ContentJSON = "application/json"
ContentXML = "application/xml"
ContentFormUrlEncoded = "application/x-www-form-urlencoded"
)

View file

@ -8,17 +8,16 @@ import (
// Respond converts a Go value to JSON and sends it to the client.
// Adapted from https://github.com/ardanlabs/service/tree/master/foundation/web
func Respond(w http.ResponseWriter, statusCode int, data interface{}) error {
// If there is nothing to marshal then set status code and return.
func Respond(w http.ResponseWriter, statusCode int, data interface{}) {
if statusCode == http.StatusNoContent {
w.WriteHeader(statusCode)
return nil
return
}
// Convert the response value to JSON.
jsonData, err := json.Marshal(data)
if err != nil {
return err
panic(err)
}
// Set the content type and headers once we know marshaling has succeeded.
@ -29,10 +28,8 @@ func Respond(w http.ResponseWriter, statusCode int, data interface{}) error {
// Send the result back to the client.
if _, err := w.Write(jsonData); err != nil {
return err
panic(err)
}
return nil
}
// ResponseError is a helper function that sends a JSON response of an error message
@ -42,9 +39,9 @@ func RespondError(w http.ResponseWriter, statusCode int, err error) {
eb.Respond(w, statusCode)
}
// RespondInternalServerError is a wrapper around RespondError that sends a 500 internal server error. Useful for
// RespondServerError is a wrapper around RespondError that sends a 500 internal server error. Useful for
// Sending generic errors when everything went wrong.
func RespondInternalServerError(w http.ResponseWriter) {
func RespondServerError(w http.ResponseWriter) {
RespondError(w, http.StatusInternalServerError, errors.New("internal server error"))
}

View file

@ -52,7 +52,7 @@ func Test_RespondError(t *testing.T) {
func Test_RespondInternalServerError(t *testing.T) {
recorder := httptest.NewRecorder()
RespondInternalServerError(recorder)
RespondServerError(recorder)
assert.Equal(t, http.StatusInternalServerError, recorder.Code)
assert.JSONEq(t, recorder.Body.String(), `{"details":["internal server error"], "message":"Internal Server Error", "error":true}`)