Merge pull request #97 from matrix-org/rob/util-logging-context-fix

Update github.com/matrix-org/util for request context fix for logging
main
Robert Swain 2017-05-10 15:56:49 +02:00 committed by GitHub
commit cdd2617f8e
2 changed files with 23 additions and 14 deletions

2
vendor/manifest vendored
View File

@ -98,7 +98,7 @@
{ {
"importpath": "github.com/matrix-org/util", "importpath": "github.com/matrix-org/util",
"repository": "https://github.com/matrix-org/util", "repository": "https://github.com/matrix-org/util",
"revision": "bc9d5e2d2f68a2ca279fce0fa2f28a91ecf301ed", "revision": "53326ed5598b226681112cbd441f59f3cffc9c82",
"branch": "master" "branch": "master"
}, },
{ {

View File

@ -93,23 +93,32 @@ func Protect(handler http.HandlerFunc) http.HandlerFunc {
} }
} }
// RequestWithLogging sets up standard logging for http.Requests.
// http.Requests will have a logger (with a request ID/method/path logged) attached to the Context.
// This can be accessed via GetLogger(Context).
func RequestWithLogging(req *http.Request) *http.Request {
reqID := RandomString(12)
// Set a Logger and request ID on the context
ctx := context.WithValue(req.Context(), ctxValueLogger, log.WithFields(log.Fields{
"req.method": req.Method,
"req.path": req.URL.Path,
"req.id": reqID,
}))
ctx = context.WithValue(ctx, ctxValueRequestID, reqID)
req = req.WithContext(ctx)
logger := GetLogger(req.Context())
logger.Print("Incoming request")
return req
}
// MakeJSONAPI creates an HTTP handler which always responds to incoming requests with JSON responses. // MakeJSONAPI creates an HTTP handler which always responds to incoming requests with JSON responses.
// Incoming http.Requests will have a logger (with a request ID/method/path logged) attached to the Context. // Incoming http.Requests will have a logger (with a request ID/method/path logged) attached to the Context.
// This can be accessed via GetLogger(Context). // This can be accessed via GetLogger(Context).
func MakeJSONAPI(handler JSONRequestHandler) http.HandlerFunc { func MakeJSONAPI(handler JSONRequestHandler) http.HandlerFunc {
return Protect(func(w http.ResponseWriter, req *http.Request) { return Protect(func(w http.ResponseWriter, req *http.Request) {
reqID := RandomString(12) req = RequestWithLogging(req)
// Set a Logger and request ID on the context
ctx := context.WithValue(req.Context(), ctxValueLogger, log.WithFields(log.Fields{
"req.method": req.Method,
"req.path": req.URL.Path,
"req.id": reqID,
}))
ctx = context.WithValue(ctx, ctxValueRequestID, reqID)
req = req.WithContext(ctx)
logger := GetLogger(req.Context())
logger.Print("Incoming request")
if req.Method == "OPTIONS" { if req.Method == "OPTIONS" {
SetCORSHeaders(w) SetCORSHeaders(w)