25// While macros are usually grotty, using them here lets us have a simple function call interface for logging that
26//
27// (1) Can be compiled out completely, so you don't even have to pay the cost to check the log level (which will be a virtual function call and a std::atomic<> read) if you don't want any AWS logging
28// (2) If you use logging and the log statement doesn't pass the conditional log filter level, not only do you not pay the cost of building the log string, you don't pay the cost for allocating or
29// getting any of the values used in building the log string, as they're in a scope (if-statement) that never gets entered.