Formatting variables and then passing them into the logger functions leads
to performance issues. i.e.
logger:debug("RECV ~s", [emqx_packet:format(Packet)])
Above message will only be printed when the current log level set to
`debug`, but the function emqx_packet:format/1 will always be evaluated no
matter what the current log level is.
OTP 21 provides a special meta-data named `report_cb`, which can be used
for lazy evaluation. The fun is only evaluated if the primary/handler log level
check passes, and is therefore recommended if it is expensive to generate