Основная причина требования String вместо Object для типа сообщения заключалась в том, чтобы избежать неоднозначности в сигнатурах метода.
Принимает следующие подписи:
1) debug(Object) // a message
2) debug(Object, Object) // message followed by a parameter
3) debug(Object, Exception) // message followed by an exception
тогда, когда вы пишете
debug("hello", new Exception("world"));
не ясно, следует ли использовать вариант 2 или вариант 3.
В любом случае, с существующим API SLF4J вы всегда можете написать:
logger.debug("{}", yourObject);
Если базовая структура ведения журнала является logback, то yourObject будет доступен всем дополнителям без изменений. Другие структуры ведения журналов не поддерживают параметры сообщений, поэтому SLF4J должен отформатировать сообщение перед вызовом базовой структуры.