ecs-logging-nodejs icon indicating copy to clipboard operation
ecs-logging-nodejs copied to clipboard

update formatHttpRequest and formatHttpResponse to handle *client* req and res

Open trentm opened this issue 4 years ago • 3 comments

Currently formatHttpRequest and formatHttpResponse handle server-side request and response objects (from node core and some of the http frameworks). It would be nice to support the client-side request and response objects:

  • client-side request is a http.ClientRequest returned from http.request() and http.get()
  • client-side response is a http.IncomingMessage returned from the "response" event of a client http.request()

Normally I'm opposed to DWIM'ing, but it would be nice if it could be managed here without gross heuristics and ambiguity. Node core docs (and likely lots of community docs) commonly refer to both server-side and client-side requests and responses as req and res. Just logging those variables as is would be nice.

One potential issue is if this blows up to a desire to support many varying "client request" and "client response" objects from Node-land http client libraries. I don't know if that would be the case.

FWIW, some minor prior art is handling for client_req and client_res log record fields in Bunyan and client_req and client_res serializers for Bunyan in the restify-clients package.

trentm avatar Mar 18 '21 21:03 trentm

I need to ask/check if client req/res events in ECS "http." fields would cause problems.

trentm avatar Mar 18 '21 21:03 trentm

FWIW, here is what pino's stdSerializers will serialize for client req/res:

[1616438720932] INFO (14594 on pink.local): finished client req/res
    req: {
      "method": "GET",
      "url": "/",
      "remoteAddress": "127.0.0.1",
      "remotePort": 3000
    }
    res: {
      "statusCode": 200
    }

trentm avatar Mar 22 '21 18:03 trentm

See this PR for discussion and code for extracting the url field, at least, from a ClientRequest object: https://github.com/elastic/apm-agent-nodejs/pull/2039

trentm avatar Apr 15 '21 23:04 trentm