Протоколирование ошибок / механизм отладки кода PL / SQL

#oracle #plsql

#Oracle #plsql

Вопрос:

Я хочу создать механизм протоколирования ошибок и отладки для моего кода PLSQL. Будет таблица log_Error, в которую я буду вставлять ошибки / отладки.

Я планирую периодически вставлять отладки в свой код, чтобы мне было легко определить, до какого момента выполняется мой код

В разделе исключения я буду вставлять сообщения об ошибках в эту таблицу журнала.

Кроме того, мне нужен механизм, с помощью которого я мог бы включить этот механизм протоколирования для определенного сеанса вместо всех сеансов по умолчанию. Если это протоколирование выполняется по умолчанию, это окажет ненужное влияние на производительность и создаст ненужные журналы

Можете ли вы, пожалуйста, предложить подход, при котором я могу включить / отключить механизм протоколирования для сеанса вручную?

Комментарии:

1. Если вы делаете это как личный проект, вполне справедливо. Но если вы пишете пакет протоколирования для работы, я предлагаю вам этого не делать. Вместо этого вам следует использовать библиотеку с открытым исходным кодом logger . Это самое близкое, что у нас есть, к отраслевому стандарту протоколирования PL / SQL. Найдите это здесь

Ответ №1:

Вы можете создать небольшой пакет протоколирования, в котором вы устанавливаете флаг для каждого сеанса следующим образом

 create package debug_log_pk as
  bLogflag boolean := false;
end debug_log_pk;
  

затем создайте процедуру, которая вставляет данные в вашу таблицу:

 create or replace procedure log_error( ..... )
as
   pragma autonomous_transaction;
begin
   if debug_log_pk.bLogflag then
     insert into logging_table (...) values (...);
     commit;
   end if;
end;
  

Где-то в вашей program. set:

 debug_log_pk.bLogflag := true; 
  

Это можно сделать в любом месте кода вашего приложения, прежде чем вы захотите войти в систему, и будет применяться для сброса сеанса. И вы также можете отключить протоколирование 🙂

Также pragma autonomous_transaction; помещает протоколирование в отдельную транзакцию, чтобы оно выдержало откат в БД.

Также взгляните на это: https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1171766400346817259