2010-09-22 2 views
0

Я Канагарай. В нашей хранимой процедуре мы регистрируем сообщения на 500 мест, а журналы хранятся в таблице, где возникают некоторые проблемы с производительностью. Нам нужно разбить эти сообщения на сообщения Debug, Info и Error. Исходя из уровня, должны регистрироваться только ограниченные сообщения. Если необходимо, мы включим следующий уровень и увидим больше журналов. Каким может быть эффективный способ введения этого уровня на основе регистрации в нашей процедуре ?.Уровень на основе Регистрация в Oracle

Заранее спасибо.

Kanagaraj.

+0

«Я Канагарай»: вам следует обновить свое имя пользователя, чтобы это отразить. Добро пожаловать в Stackoverflow. – Thilo

ответ

3

Что-то вроде этого ...

create or replace package logger as 
    min_level number := 2; 
    procedure ins_log(level number, message varchar2); 
end; 

create or replace package body logger as 
    procedure ins_log(level number, message varchar2) is 
    pragma autonomous_transaction; 
    begin 
    if level>=min_level then 
     insert into loggin(ts, msg) values (sysdate, message); 
    end if; 
    commit; // autonomous_transaction requires that 
    end; 
end; 

EDIT: Добавлена ​​pragma autonomous_transaction;, благодаря Адам

+1

Плюс процедура настройки 'min_level'. У вас также могут быть отдельные процедуры для разных уровней, поэтому вы должны называть 'logger.info (message)' и т. Д., Что означало бы, что вам не нужно знать значения уровня в вызывающем коде. –

+0

Alex: Чтобы сделать его максимально простым, я только что сделал min_level общедоступным. Реализация в реальной жизни будет гораздо больше похожа на то, что вы описываете. –

+1

Если вы измените значение min_level, вам нужно перекомпилировать спецификацию пакета, которая вызовет все сеансы, которые уже вызвали ins_log, чтобы получить ORA-04061. Можно рассмотреть возможность сохранения min_level в контексте. –

2

Существует порт log4j для Oracle PL/SQL, которые могут быть найдены на sourceforge. Это позволяет включать/отключать ведение журнала на разных уровнях, а для конкретных пакетов/функций/процедур просто изменять конфигурацию. Он также поддерживает перенаправление в разные пункты назначения.

0

Отметьте PLJ-Logger по телефону https://sourceforge.net/p/plj-logger/home/. Его действительно легко реализовать и имеет желаемую функциональность и многое другое. Правильное ведение журнала, встроенное в код PL/SQL, преобразует его.

P