Merge pull request #97 from matrix-org/rob/util-logging-context-fix
Update github.com/matrix-org/util for request context fix for loggingmain
commit
cdd2617f8e
|
@ -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"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue