Ну насколько я понимаю, чистая функция не должна производить io, соответственно если внутри функции есть логгинг, то она уже не чистая? Разве что она формирует строку по мере действия и выкидывает её в конце? Или я не прав?
второй вариант
функция же останется чистой, мы просто добавим ещё один аргумент на выходе, он соответственно будет коррелировать с входом функции