graphql-platform icon indicating copy to clipboard operation
graphql-platform copied to clipboard

Make it simpler in `ExecutionDiagnosticEventListener.ResolverError` to distinguish between server and client errors

Open cmeeren opened this issue 1 year ago • 3 comments

Product

Hot Chocolate

Is your feature request related to a problem?

I want to log all server errors as errors, and all client errors at a lower severity level. However, ExecutionDiagnosticEventListener.ResolverError gives me no robust way to distinguish between them.

I originally tried to base this on whether the IError passed to ResolverError contains an exception, but this does then not log errors like HC0018 "Cannot return null for non-nullable field" as errors. I can of course add this code to the check, but adding error codes as I randomly discover that something is not logged as an error is no way to go about this.

The solution you'd like

I'm open to various solutions, but it could be something as simple as a property IError.IsServerError or IError.IsClientError.

cmeeren avatar Jun 05 '24 05:06 cmeeren

With client errors you really mean error that are caused by client inputs?

michaelstaib avatar Jun 05 '24 15:06 michaelstaib

Yes, that is correct. Put another way, errors that according to normal HTTP semantics would give 4XX errors (and not 5XX errors). Or in yet other words: Errors where the client, not the server, is at fault.

cmeeren avatar Jun 05 '24 19:06 cmeeren

Related: Error code HC0018 is used both when a required variable is missing (client error) and when the server tries to return null for a non-nullable field (server error).

So currently, for this error code, I have to also check the message in order to know whether to log this as an error.

cmeeren avatar Jun 19 '24 05:06 cmeeren