I think a better approach than this is simply to use context.Value to store a request id. The logger or handlers can then extract this and use it as required to trace execution. The user again is orthogonal to logging/loggers the and I believe should be attached as a separate request specific value. The logger should not know about user except as a value passed in from handlers to log (if handlers wish).
I'm not so keen on creating a separate struct and bundling all this information together, it ties together things which should be separate, and takes away control of what is logged from the handlers.
Thanks again for the thought provoking article and discussion, please do keep them coming - I will try to let you post your own articles from now on!