100% well said! Exactly how to handle log/print/metrics (as results/returns from functions) has been on my mental back burner for years.
It's proper (but goofy) to pass in a `logger` object to every function, but the practicality of plumbing a "logger" everywhere is disgusting. There's a ton of value to be able to "capture" what was logged by a function, but as you mentioned with "metrics", the invasiveness of plumbing a metrics object "through" your code is really gross.
Maybe a straw man syntax like:
this.__classHooks__.logger
= new AbstractLogger(...)
this.__classHooks__.metrics
= new AbstractMetrics(...)
...like a puzzle piece, if the container (parent object) wants to "attach" to the exported interface, it can kindof dependency injection, otherwise logs and metrics might fly off into the void.
Comments
100% well said! Exactly how to handle log/print/metrics (as results/returns from functions) has been on my mental back burner for years.
It's proper (but goofy) to pass in a `logger` object to every function, but the practicality of plumbing a "logger" everywhere is disgusting. There's a ton of value to be able to "capture" what was logged by a function, but as you mentioned with "metrics", the invasiveness of plumbing a metrics object "through" your code is really gross.
Maybe a straw man syntax like:
...like a puzzle piece, if the container (parent object) wants to "attach" to the exported interface, it can kindof dependency injection, otherwise logs and metrics might fly off into the void.