После долгих пыток выяснил следующее: ловится исключение толко если блок try ... catch начинается вне перед стартом транзакции но появление окна инфолога это не лечит. Неужели никто не знает как его отключить...
Сейчас ковырялся с DLL/DLLFunction и наткнулся на ту же фигню: успешно ловлю исключение Exception::Internal, но сообщение infolog все равно появляется. Вылечилось до удивления просто:
PHP код:
catch (Exception::Internal)
{
infolog.clear();
}
Здесь при обработке исключения infolog будет очищен и не появится вовсе. В более затейливом сценарии, если какие-то сообщения инфолога надо все-таки сохранить, можно сделать так:
PHP код:
int nlines = 0;
;
info("blah-blah-blah"); // выводим информативное сообщение
setprefix("prefix");
warning("blah-blah"); // ...и еще одно
try
{
setprefix("prefix2"); // префиксы сообщений нормально работают
error("blah"); // эту ошибку надо обязательно показать
nlines = infolog.line(); // запомним, сколько строк оставить
// далее может генериться Exception::Internal
// но мы его видеть не хотим
}
catch (Exception::Internal)
{
infolog.clear(nlines); // оставить только nlines строк
}