В дополнение к стоимости исполнения все, кроме варианта 3, также ужасно сложно (*).
Кроме того, я не уверен, что есть библиотека Java, которая читает InputStream и преобразует его в вызовы Commons Logging. Даже если это возможно, чтобы иметь возможность полностью контролировать фильтрацию с помощью конфигурации на стороне Java, вам потребуется записать все на уровне трассировки в стандартный вывод (поскольку код C ++ не знает о настроенных уровнях журнала), что также звучит чрезмерный.
Перейдите к Log4cxx или создайте некоторый код C ++, который может прочитать файл конфигурации самостоятельно.
(*) Хорошо, вариант 4 (иметь скрипт-обертку, который перенаправляет stderr / stdout из вашей немодифицированной программы C ++ в программу Java, которая переводит выходные данные в записи журнала) не будет очень сложным.