projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
18896: controller logs the UUIDs of the tokens used in each request.
[arvados.git]
/
sdk
/
go
/
httpserver
/
logger.go
diff --git
a/sdk/go/httpserver/logger.go
b/sdk/go/httpserver/logger.go
index 7eb7f0f03d57b571e314f8d87ca6714cf7d6563f..437429611cb1ee1d0a5db75be353865863985bb6 100644
(file)
--- a/
sdk/go/httpserver/logger.go
+++ b/
sdk/go/httpserver/logger.go
@@
-21,7
+21,8
@@
type contextKey struct {
}
var (
}
var (
- requestTimeContextKey = contextKey{"requestTime"}
+ requestTimeContextKey = contextKey{"requestTime"}
+ responseLogFieldsContextKey = contextKey{"responseLogFields"}
)
type hijacker interface {
)
type hijacker interface {
@@
-64,6
+65,15
@@
func HandlerWithDeadline(timeout time.Duration, next http.Handler) http.Handler
})
}
})
}
+func SetResponseLogFields(ctx context.Context, fields logrus.Fields) {
+ ctxfields := ctx.Value(&responseLogFieldsContextKey)
+ if c, ok := ctxfields.(logrus.Fields); ok {
+ for k, v := range fields {
+ c[k] = v
+ }
+ }
+}
+
// LogRequests wraps an http.Handler, logging each request and
// response.
func LogRequests(h http.Handler) http.Handler {
// LogRequests wraps an http.Handler, logging each request and
// response.
func LogRequests(h http.Handler) http.Handler {
@@
-81,6
+91,7
@@
func LogRequests(h http.Handler) http.Handler {
})
ctx := req.Context()
ctx = context.WithValue(ctx, &requestTimeContextKey, time.Now())
})
ctx := req.Context()
ctx = context.WithValue(ctx, &requestTimeContextKey, time.Now())
+ ctx = context.WithValue(ctx, &responseLogFieldsContextKey, logrus.Fields{})
ctx = ctxlog.Context(ctx, lgr)
req = req.WithContext(ctx)
ctx = ctxlog.Context(ctx, lgr)
req = req.WithContext(ctx)
@@
-124,6
+135,9
@@
func logResponse(w *responseTimer, req *http.Request, lgr *logrus.Entry) {
"timeWriteBody": stats.Duration(tDone.Sub(writeTime)),
})
}
"timeWriteBody": stats.Duration(tDone.Sub(writeTime)),
})
}
+ if responseLogFields, ok := req.Context().Value(&responseLogFieldsContextKey).(logrus.Fields); ok {
+ lgr = lgr.WithFields(responseLogFields)
+ }
respCode := w.WroteStatus()
if respCode == 0 {
respCode = http.StatusOK
respCode := w.WroteStatus()
if respCode == 0 {
respCode = http.StatusOK