Oracle中基于级别的日志记录

Oracle中基于级别的日志记录,oracle,logging,log-level,Oracle,Logging,Log Level,我是Kanagaraj。在我们的存储过程中,我们在500个位置记录消息,日志存储在一个表中,在该表中我们遇到一些性能问题。我们需要将这些消息分为调试消息、信息消息和错误消息。根据级别,只应记录有限的消息。如有必要,我们将启用下一个级别并查看更多日志。在我们的过程中引入这种基于级别的日志记录的有效方法是什么 提前谢谢 卡纳加拉杰。像这样的 create or replace package logger as min_level number := 2; procedure ins_log

我是Kanagaraj。在我们的存储过程中,我们在500个位置记录消息,日志存储在一个表中,在该表中我们遇到一些性能问题。我们需要将这些消息分为调试消息、信息消息和错误消息。根据级别,只应记录有限的消息。如有必要,我们将启用下一个级别并查看更多日志。在我们的过程中引入这种基于级别的日志记录的有效方法是什么

提前谢谢

卡纳加拉杰。

像这样的

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;

编辑:增加了
布拉格自治事务,谢谢Adam

在上可以找到Oracle PL/SQL的log4j端口。这允许在不同级别启用/禁用日志记录,对于特定的包/函数/过程,只需修改配置即可。它还支持重定向到不同的目的地。

请访问PLJ Logger。它真的很容易实现,并且具有您想要的功能和更多功能。PL/SQL代码中内置的正确日志记录将对其进行转换


有点晚了;我建议您使用Logger:它可以满足您的要求。

“我是卡纳加拉杰”:您应该更新用户名以反映这一点。欢迎使用Stackoverflow。另外还有一个调整
min\u级别的过程。对于不同的级别,您也可以有单独的过程,因此您可以调用
logger.info(message)
等,这意味着您不需要知道调用代码中的级别值。Alex:为了尽可能简单,我刚刚将最小级别公开。现实生活中的实现将更像您描述的内容。如果更改min_level的值,则必须重新编译包规范,这将导致所有已调用ins_log的会话获得ORA-04061。要考虑的一个选项是在上下文中存储MixLea. @ AMMOQ,我想念你可以这样做,因为某些原因,它是在正文中定义的。理解这是一个简单的例子,只是想给出一个相当简单的扩展(不想通过单独的回答来窃取您的灵感*8-)记录器或审计员程序应该使用自治事务;否则,回滚将消除写入的日志记录。