log
Logs msg at lvl, only calling display if isAt returns true for lvl.
Same as log, but msg is only evaluated if lvl would actually be emitted — use this overload when building the message string itself is non-trivial work (e.g. serializing a payload), to avoid paying that cost on a level the logger would discard anyway.