Задумался я как-то невзначай над тем, почему строки для trace и debug формировать труднее всего, но при этом они же чаще всего вообще не выводятся никуда. Ведь несправедливо же: интерпретатор старается, формирует какие-то дампы, куски json'ов вставляет - а мой любимый фремйворк для логирования, Log::Log4perl, всё это радостно сливает в /dev/null.
Также очень не хватало возможности выводить лог-сообщения в нормальном sprintf-стиле: я думаю, многих достала необходимость конкатенации строк для вставки переменных или использования для компиляции строки самой sprintf. Ну неудобно это! Мне куда легче не использовать %s и прочие немногочисленные валидные форматеры printf в тексте лог-сообщений, нежели каждый раз задумываться над тем, как собрать строку лога из разрозненных кусков.
Порылся я немного в поисках решения задачи - и нашёл Log::Contextual - вроде бы делает он всё как нужно, и вместо самой строки потребно отдавать ему блоки кода, в которых и формировать строки. Если уровень логирования ниже требуемого - блок просто не будет выполнен.
Но как-то решил я невзначай порыть исходники этого модуля - и узрел, что там гигантский пласт кода, который делает что-то совершенно хакерски-химерическое (код самого Log::Log4perl проще и понятнее в $N раз), позволяет подключать все подряд фреймворки... Это всё было очень круто конечно, но мне с одной стороны не нужны были другие фреймворки, а с другой - не хотелось бы, чтобы поверх и без того относительно тяжёлого Log::Log4perl ещё гора кода наросла. Ну и встроенная sprintf-функциональность из-за тотальной универсальности логеров ни в одном из них не была реализована, в том числе и в Contextual.
В итоге я сломался и сделал свой велосипед: https://github.com/DRVTiny/Log4perl--KISS
Он позволяет делать как
debug {'String'}
debug_ 'String'
Подробнее - см в SYNOPSIS прилагающегося README.
Относительно устранения гипотетического конфликта форматеров sprintf и логируемого содержимого - есть идеи как это реализовать :) Но в любом случае конечно только сам логирующий знает, могут в его контенте попадаться форматеры или нет.