我希望在我们现有的Oracle应用程序中引入一个日志框架,以取代DBMS_OUTPUT的使用。
该框架将主要用于辅助调试,并将详细说明启动x过程、参数细节、结束过程x等内容。它还应该为所有或仅仅一个程序单元打开功能,不同级别的跟踪实际上是标准日志功能。
实现这些需求应该相对简单,但是我希望您的帮助是如何最好地关闭和打开此功能。当跟踪被关闭时,我试图实现的是最小的性能命中。希望大多数时候都是如此!
由于应用程序使用的是10g版本2,我最初喜欢将日志机制封装在条件编译中,这样日志框架在正常操作中甚至是不可见的。不幸的是,我不得不勉强放弃这个想法,因为大多数应用程序都是使用独立的过程和函数构建的,因此打开日志功能可能会使许多代码失效。
我已经查看了几个现有的开源资源和其他框架\功能,以获得灵感:
(http://log4plsql.sourceforge.net/) log4plsql
APC的评论这里,特别是在可接受的影响下,让我感到担忧。
OraLog项目(http://oralog.sourceforge.net )
自2007年以来没有任何更新
PL/VISION (这里)
看起来很老了,自从Oracle8i之后没有变化?
问汤姆仪器仪表 (这里)
更新01/04/2014 汤姆·凯特现在推荐泰勒·穆斯的记录器
如果您在Oracle应用程序中引入了某种形式的登录,您是如何实现它的,尤其是如何控制它,我将非常感兴趣地了解您的经验。
发布于 2009-08-05 13:07:44
您提到了放弃条件编译的想法,因为潜在的级联失效-有一种方法有点类似,如果您愿意接触PL/SQL源代码,在那里需要日志记录/跟踪不涉及重新编译来启用。
您仍然可以将自己选择的名称/值对添加到PLSQL_CCFLAGS,并让应用程序代码对v$参数进行相对轻量级的查询,以确定日志是否“打开”。最简单的实现将是一个名称/值对,但您可以将其扩展到不同的特定于模块的对,这样日志记录就可以以更细的粒度打开。
编辑这里有一个非常简单的例子来响应您的评论/请求--您显然希望在解析PLSQL_CCFLAGS字符串时更加复杂,以防它有其他现有的信息,比如包装成一个函数,等等:
create or replace procedure ianc_cc
is
cc_flag_val varchar2(4000);
begin
-- need direct select grant on v_$parameter for this...
select value into cc_flag_val
from v$parameter where name = 'plsql_ccflags';
if (cc_flag_val = 'custom_logging:true') then
dbms_output.put_line('custom logging is on');
else
dbms_output.put_line('custom logging is off');
end if;
end;
/现在,作为有权发出ALTER的用户:
更改系统集PLSQL_CCFLAGS=“定制_日志:true”;
然后向后切换:
更改系统集PLSQL_CCFLAGS='';
发布于 2013-07-19 07:46:54
查看相同的问题,并发现以下项目似乎仍处于活动状态,https://github.com/tmuth/Logger---A-PL-SQL-Logging-Utility
发布于 2009-08-05 12:24:22
在我们的应用程序中,我们大量使用了Ask的调试器。有一件事我很快就注意到了,那就是“调试器”被问得太多了,看不出是否每条日志消息都有日志记录。我对它进行了修改,每100条日志消息只检查一次表,现在它运行得很好。
我的重点是尽量避免检查每个日志消息的表,以确定是否应该输出它。通常,您希望在长时间运行的过程中打开日志记录,所以您可以这样做很重要。在我的例子中,我决定我可以忍受等待几秒钟,直到100个日志记录调用过去之后,它才真正注意到日志被打开。
https://stackoverflow.com/questions/1232246
复制相似问题