DebugLogger
Writes a diagnostic line, but only for the categories that are switched on.
message is a lambda rather than a String so that instrumenting a path taken once per chat message costs nothing while debugging is off: the interpolation never runs. The if (debugMode) logger.info("... $word") guards this replaced paid for their strings either way.