ecs-logging-nodejs
ecs-logging-nodejs copied to clipboard
update formatHttpRequest and formatHttpResponse to handle *client* req and res
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.ClientRequestreturned fromhttp.request()andhttp.get() - client-side response is a
http.IncomingMessagereturned from the "response" event of a clienthttp.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.
I need to ask/check if client req/res events in ECS "http." fields would cause problems.
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
}
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