gpt4 book ai didi

oracle - PL/SQL 日志记录 - 如何控制?

转载 作者:行者123 更新时间:2023-12-03 01:21:02 25 4
gpt4 key购买 nike

我希望在我们现有的 Oracle 应用程序中引入一个日志框架来取代 DBMS_OUTPUT 的使用。

该框架将主要用于帮助调试,并详细说明诸如启动 x 过程、参数详细信息、结束过程 x 等。它还应该具有为所有或仅一个程序单元、各种跟踪级别实际上是标准的日志记录功能。

实现这些要求应该相对简单,但是我需要您的帮助是如何最好地关闭和打开此功能。我试图实现的是关闭跟踪时尽可能小的性能影响。希望大部分时间都是这样!

由于应用程序使用的是 10g 第 2 版,我最初喜欢将日志记录机制包装在条件编译内的外观,这样日志记录框架在正常操作期间甚至不可见。不幸的是,我不得不勉强放弃这个想法,因为大多数应用程序都是使用独立的过程和函数构建的,因此打开日志记录功能可能会使许多代码无效。

我查看了几个现有的开源和其他框架\功能以获取灵感:

log4plsql ( http://log4plsql.sourceforge.net/ )

APC 的评论 here尤其是在可接受的影响下,让我感到担忧。

OraLog 项目 ( http://oralog.sourceforge.net )

自 2007 年以来没有更新

PL/VISION ( here )

看起来很旧,自 Oracle 8i 以来没有任何变化?

询问 Tom Instrumentation ( here )

更新 01/04/2014 Tom Kyte现在推荐 Tyler Muth 的 Logger

如果您在 Oracle 应用程序中引入了某种形式的日志记录,我真的很想听听您的经验、您如何实现它,尤其是如何控制它。

最佳答案

您提到由于潜在的级联失效而放弃条件编译的想法 - 如果您愿意接触需要日志记录/跟踪且不涉及重新编译的 PL/SQL 源,则有一种有点类似的方法启用。

您仍然可以向 PLSQL_CCFLAGS 添加您自己选择的名称/值对,并让您的应用程序代码对 v$parameter 执行相对轻量级的查询,以确定日志记录是否“打开”。最粗略的实现是一个名称/值对,但您可以将其扩展为具有特定于模块的不同对,以便可以以更精细的粒度打开日志记录。

[编辑]这是一个非常简单的示例,用于响应您的评论/请求 - 您显然希望更复杂地解析 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 SYSTEM 的用户:

更改系统设置 PLSQL_CCFLAGS='custom_logging:true';

并通过以下方式切换回来:

更改系统设置 PLSQL_CCFLAGS='';

关于oracle - PL/SQL 日志记录 - 如何控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1232246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com