Skip to content

Commit a8285a2

Browse files
author
abhif22
committed
Changes for logging query string during panics
1 parent dae2e13 commit a8285a2

3 files changed

Lines changed: 13 additions & 12 deletions

File tree

graphql.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,8 @@ func (s *Schema) exec(ctx context.Context, queryString string, operationName str
223223
varTypes[v.Name.Name] = introspection.WrapType(t)
224224
}
225225
traceCtx, finish := s.tracer.TraceQuery(ctx, queryString, operationName, variables, varTypes)
226-
data, errs := r.Execute(traceCtx, res, op)
226+
queryInfo := fmt.Sprintf("Query: %s\nVariables: %+v\n\n", queryString, variables)
227+
data, errs := r.Execute(traceCtx, res, op, queryInfo)
227228
finish(errs)
228229

229230
return &Response{

internal/exec/exec.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,25 +26,25 @@ type Request struct {
2626
Logger log.Logger
2727
}
2828

29-
func (r *Request) handlePanic(ctx context.Context) {
29+
func (r *Request) handlePanic(ctx context.Context, queryString string) {
3030
if value := recover(); value != nil {
3131
r.Logger.LogPanic(ctx, value)
32-
r.AddError(makePanicError(value))
32+
r.AddError(makePanicError(value, queryString))
3333
}
3434
}
3535

3636
type extensionser interface {
3737
Extensions() map[string]interface{}
3838
}
3939

40-
func makePanicError(value interface{}) *errors.QueryError {
41-
return errors.Errorf("graphql: panic occurred: %v", value)
40+
func makePanicError(value interface{}, info string) *errors.QueryError {
41+
return errors.Errorf("graphql: panic occurred: %v\n%s\n\n", value, info)
4242
}
4343

44-
func (r *Request) Execute(ctx context.Context, s *resolvable.Schema, op *query.Operation) ([]byte, []*errors.QueryError) {
44+
func (r *Request) Execute(ctx context.Context, s *resolvable.Schema, op *query.Operation, queryInfo string) ([]byte, []*errors.QueryError) {
4545
var out bytes.Buffer
4646
func() {
47-
defer r.handlePanic(ctx)
47+
defer r.handlePanic(ctx, queryInfo)
4848
sels := selected.ApplyOperation(&r.Request, s, op)
4949
r.execSelections(ctx, sels, nil, s, s.Resolver, &out, op.Type == query.Mutation)
5050
}()
@@ -79,7 +79,7 @@ func (r *Request) execSelections(ctx context.Context, sels []selected.Selection,
7979
for _, f := range fields {
8080
go func(f *fieldToExec) {
8181
defer wg.Done()
82-
defer r.handlePanic(ctx)
82+
defer r.handlePanic(ctx, "")
8383
f.out = new(bytes.Buffer)
8484
execFieldSelection(ctx, r, s, f, &pathSegment{path, f.field.Alias}, true)
8585
}(f)
@@ -178,7 +178,7 @@ func execFieldSelection(ctx context.Context, r *Request, s *resolvable.Schema, f
178178
defer func() {
179179
if panicValue := recover(); panicValue != nil {
180180
r.Logger.LogPanic(ctx, panicValue)
181-
err = makePanicError(panicValue)
181+
err = makePanicError(panicValue, "")
182182
err.Path = path.toSlice()
183183
}
184184
}()
@@ -324,7 +324,7 @@ func (r *Request) execList(ctx context.Context, sels []selected.Selection, typ *
324324
for i := 0; i < l; i++ {
325325
go func(i int) {
326326
defer wg.Done()
327-
defer r.handlePanic(ctx)
327+
defer r.handlePanic(ctx, "")
328328
r.execSelectionSet(ctx, sels, typ.OfType, &pathSegment{path, i}, s, resolver.Index(i), &entryouts[i])
329329
}(i)
330330
}

internal/exec/subscribe.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func (r *Request) Subscribe(ctx context.Context, s *resolvable.Schema, op *query
2525
var f *fieldToExec
2626
var err *errors.QueryError
2727
func() {
28-
defer r.handlePanic(ctx)
28+
defer r.handlePanic(ctx, "")
2929

3030
sels := selected.ApplyOperation(&r.Request, s, op)
3131
var fields []*fieldToExec
@@ -117,7 +117,7 @@ func (r *Request) Subscribe(ctx context.Context, s *resolvable.Schema, op *query
117117

118118
// resolve response
119119
func() {
120-
defer subR.handlePanic(subCtx)
120+
defer subR.handlePanic(subCtx, "")
121121

122122
var buf bytes.Buffer
123123
subR.execSelectionSet(subCtx, f.sels, f.field.Type, &pathSegment{nil, f.field.Alias}, s, resp, &buf)

0 commit comments

Comments
 (0)