// ContextWithLogBuffer returns a context and a buffer into which the new, bound // logger will write into. This method allows you to inspect what data was // logged more easily in your tests. func ContextWithLogBuffer() (context.Context, *bytes.Buffer) { output := new(bytes.Buffer) l, _ := hlog.New() l.Logger.Out = output l.Logger.Formatter.(*logrus.TextFormatter).DisableColors = true l.Logger.Level = logrus.DebugLevel ctx := hlog.Set(context.Background(), l) return ctx, output }
// Start initializes a new test helper object and conceptually "starts" a new // test func Start(t *testing.T) *T { result := &T{} result.T = t result.LogBuffer = new(bytes.Buffer) result.Logger, result.LogMetrics = hlog.New() result.Logger.Logger.Out = result.LogBuffer result.Logger.Logger.Formatter.(*logrus.TextFormatter).DisableColors = true result.Logger.Logger.Level = logrus.DebugLevel result.Ctx = hlog.Set(context.Background(), result.Logger) result.HorizonDB = Database() result.CoreDB = StellarCoreDatabase() result.Assert = assert.New(t) result.Require = require.New(t) return result }
// LoggerMiddleware is the middleware that logs http requests and resposnes // to the logging subsytem of horizon. func LoggerMiddleware(c *web.C, h http.Handler) http.Handler { fn := func(w http.ResponseWriter, r *http.Request) { ctx := gctx.FromC(*c) mw := mutil.WrapWriter(w) logger := log.WithField("req", middleware.GetReqID(*c)) ctx = log.Set(ctx, logger) gctx.Set(c, ctx) logStartOfRequest(ctx, r) then := time.Now() h.ServeHTTP(mw, r) duration := time.Now().Sub(then) logEndOfRequest(ctx, duration, mw) } return http.HandlerFunc(fn) }
// Context provides a context suitable for testing in tests that do not create // a full App instance (in which case your tests should be using the app's // context). This context has a logger bound to it suitable for testing. func Context() context.Context { return hlog.Set(context.Background(), testLogger) }