Not so obvious. How to implement it without passing request id to all the functions, when they are unrelated to request/http ? Especially in languages without thread-locals such as javascript?
Many frameworks solve this with logger context. Add the properties you want to the logging context and all future logs in that context will have that property.
One simple example - Serilog enrichment https://github.com/serilog/serilog/wiki/Enrichment
This does however assume your entire application uses the same logger. But this is generally a requirement in services that require tracing like this.