Как альтернатива записи в файл, как насчет записи в таблицу? Вместо вызова DBMS_OUTPUT.PUT_LINE вы можете вызвать свою собственную процедуру DEBUG.OUTPUT что-то вроде:
procedure output (p_text varchar2) is
pragma autonomous_transaction;
begin
if g_debugging then
insert into debug_messages (username, datetime, text)
values (user, sysdate, p_text);
commit;
end if;
end;
Использование автономной транзакции позволяет вам сохранить отладочные сообщения, созданные из транзакций, которые откатываются (например, после возникновения исключения), как это было бы, если бы вы использовали файл.
Логическая переменная g_debugging - это переменная пакета, которая может быть установлена по умолчанию в false и иметь значение true, когда требуется отладочный вывод.
Конечно, вам нужно управлять этой таблицей, чтобы она не росла вечно! Одним из способов может быть задание, которое выполняется еженедельно / еженедельно и удаляет все «старые» отладочные сообщения.