ORACE APEX 18.2 之四(安裝logger)
方案. 新用戶下安裝logger
#Using sql*plus or SQL Developer, connect to the database as system or a user with the DBA role.
[oracle@xag182 logger]$ sql sys/[email protected]:1521/PDB1 as sysdba
SQL> SET SQLFORMAT ansiconsole
SQL>
select tablespace_name,file_name,bytes/1024/1024 mb from dba_temp_files
union all
select tablespace_name,file_name,bytes/1024/1024 mb from dba_data_files;
TABLESPACE_NAME FILE_NAME MB
TEMP1 /u02/oradata/MPAPEX/pdb1/TEMP1_1.dbf 256
TEMP1 /u02/oradata/MPAPEX/pdb1/TEMP1_2.dbf 256
TEMP2 /u02/oradata/MPAPEX/pdb1/TEMP2_1.dbf 256
SYSTEM /u02/oradata/MPAPEX/pdb1/system01.dbf 360
SYSAUX /u02/oradata/MPAPEX/pdb1/sysaux01.dbf 370
UNDOTBS1 /u02/oradata/MPAPEX/pdb1/undotbs01.dbf 300
PDB1_UD /u02/oradata/MPAPEX/pdb1/PDB1_UD1.dbf 128
PDB1_UD /u02/oradata/MPAPEX/pdb1/PDB1_UD2.dbf 128
I_PDB1_UD /u02/oradata/MPAPEX/pdb1/I_PDB1_UD1.dbf 64
I_PDB1_UD /u02/oradata/MPAPEX/pdb1/I_PDB1_UD2.dbf 64
APEX182 /u02/oradata/MPAPEX/pdb1/apex182.dbf 384
APEX182_FILE /u02/oradata/MPAPEX/pdb1/apex182_file.dbf 256
ORDS183 /u02/oradata/MPAPEX/pdb1/ords183.dbf 256
APEXTB /u02/oradata/MPAPEX/pdb1/apextb.dbf 128
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
TEMP_GP TEMP1
create_user.sql
SQL> @/home/oracle/logger/create_user.sql
Logger create schema script.
You will be prompted for a username, tablespace, temporary tablespace and password.
Name of the new logger schema to create [LOGGER_USER] :
Tablespace for the new logger schema [USERS] : PDB1_UD
Temporary Tablespace for the new logger schema [TEMP] : TEMP_GP
Enter a password for the logger schema [] : 123456
User LOGGER_USER created.
User LOGGER_USER altered.
Grant succeeded.
LOGGER_USER user successfully created.
Important!!! Connect as the LOGGER_USER user and run the logger_install.sql script.
logger_install.sql
[oracle@xag182 logger]$ sql logger_user/[email protected]:1521/PDB1
SQL> SET SQLFORMAT ansiconsole
SQL> @/home/oracle/logger/logger_install.sql
___________________________________________________________________
User has all required privileges, installation will continue.
___________________________________________________________________
PL/SQL procedure successfully completed.
tables/logger_logs.sql
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
tables/logger_prefs.sql
PL/SQL procedure successfully completed.
Trigger BIU_LOGGER_PREFS compiled
Errors: check compiler log
Trigger BIU_LOGGER_PREFS altered.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
Trigger BIU_LOGGER_PREFS altered.
tables/logger_logs_apex_items.sql
PL/SQL procedure successfully completed.
Trigger BIU_LOGGER_APEX_ITEMS compiled
tables/logger_prefs_by_client_id.sql
PL/SQL procedure successfully completed.
jobs/logger_purge_job.sql
PL/SQL procedure successfully completed.
jobs/logger_unset_prefs_by_client.sql
PL/SQL procedure successfully completed.
views/logger_logs_5_min.sql
View LOGGER_LOGS_5_MIN created.
views/logger_logs_60_min.sql
View LOGGER_LOGS_60_MIN created.
views/logger_logs_terse.sql
packages/logger.pks
Package LOGGER compiled
packages/logger.pkb
Package Body LOGGER compiled
Recompile biu_logger_prefs after logger.pkb
Trigger BIU_LOGGER_PREFS altered.
contexts/logger_context.sql
PL/SQL procedure successfully completed.
procedures/logger_configure.plb
Procedure LOGGER_CONFIGURE compiled
install/post_install_configuration.sql
Calling logger_configure
PL/SQL procedure successfully completed.
Setting Logger Level
PL/SQL procedure successfully completed.
*************************************************
Now executing LOGGER.STATUS...
Project Home Page : https://github.com/oraopensource/logger/
Logger Version : 3.1.1
Debug Level : DEBUG
Capture Call Stack : TRUE
Protect Admin Procedures : TRUE
APEX Tracing : Enabled
SCN Capture : Disabled
Min. Purge Level : DEBUG
Purge Older Than : 7 days
Pref by client_id expire : 12 hours
For all client info see : logger_prefs_by_client_id
PL/SQL procedure successfully completed.
*************************************************
PL/SQL procedure successfully completed.
View LOGGER_LOGS_TERSE altered.
授權 apex 用戶 訪問 Logger架構下的對象
[oracle@xag182 logger]$ sql logger_user/[email protected]:1521/PDB1
SQL> SET SQLFORMAT ansiconsole
SQL> @/home/oracle/logger/scripts/grant_logger_to_user.sql apex
old:grant execute on logger to &to_user
new:grant execute on logger to apex
Grant succeeded.
old:grant select, delete on logger_logs to &to_user
new:grant select, delete on logger_logs to apex
Grant succeeded.
old:grant select on logger_logs_apex_items to &to_user
new:grant select on logger_logs_apex_items to apex
Grant succeeded.
old:grant select, update on logger_prefs to &to_user
new:grant select, update on logger_prefs to apex
Grant succeeded.
old:grant select on logger_prefs_by_client_id to &to_user
new:grant select on logger_prefs_by_client_id to apex
Grant succeeded.
old:grant select on logger_logs_5_min to &to_user
new:grant select on logger_logs_5_min to apex
Grant succeeded.
old:grant select on logger_logs_60_min to &to_user
new:grant select on logger_logs_60_min to apex
Grant succeeded.
old:grant select on logger_logs_terse to &to_user
new:grant select on logger_logs_terse to apex
Grant succeeded.
在apex用戶下創建 Logger架構下的對象同義詞
[oracle@xag182 logger]$ sql apex/[email protected]:1521/PDB1
SQLcl: Release 12.2.0.1.0 RC on Tue Feb 12 16:12:39 2019
SQL> @/home/oracle/logger/scripts/create_logger_synonyms.sql logger_user
old:create or replace synonym logger for &from_user..logger
new:create or replace synonym logger for logger_user.logger
Synonym LOGGER created.
old:create or replace synonym logger_logs for &from_user..logger_logs
new:create or replace synonym logger_logs for logger_user.logger_logs
Synonym LOGGER_LOGS created.
old:create or replace synonym logger_logs_apex_items for &from_user..logger_logs_apex_items
new:create or replace synonym logger_logs_apex_items for logger_user.logger_logs_apex_items
Synonym LOGGER_LOGS_APEX_ITEMS created.
old:create or replace synonym logger_prefs for &from_user..logger_prefs
new:create or replace synonym logger_prefs for logger_user.logger_prefs
Synonym LOGGER_PREFS created.
old:create or replace synonym logger_prefs_by_client_id for &from_user..logger_prefs_by_client_id
new:create or replace synonym logger_prefs_by_client_id for logger_user.logger_prefs_by_client_id
Synonym LOGGER_PREFS_BY_CLIENT_ID created.
old:create or replace synonym logger_logs_5_min for &from_user..logger_logs_5_min
new:create or replace synonym logger_logs_5_min for logger_user.logger_logs_5_min
Synonym LOGGER_LOGS_5_MIN created.
old:create or replace synonym logger_logs_60_min for &from_user..logger_logs_60_min
new:create or replace synonym logger_logs_60_min for logger_user.logger_logs_60_min
Synonym LOGGER_LOGS_60_MIN created.
old:create or replace synonym logger_logs_terse for &from_user..logger_logs_terse
new:create or replace synonym logger_logs_terse for logger_user.logger_logs_terse
Synonym LOGGER_LOGS_TERSE created.
鎖定logger_user 用戶(可選)
#如果要限制對“Logger Schema”的訪問(因為它具有CREATE ANY CONTEXT權限),您可以將其簡單鎖定
[oracle@xag182 logger]$ sql sys/[email protected]:1521/PDB1 as sysdba
SQL> alter user logger_user account lock;
[oracle@xag182 logger]$ sql apex/[email protected]:1521/PDB1
SQL> set serveroutput on
SQL> exec logger.status
Project Home Page : https://github.com/oraopensource/logger/
Logger Version : 3.1.1
Debug Level : DEBUG
Capture Call Stack : TRUE
Protect Admin Procedures : TRUE
APEX Tracing : Enabled
SCN Capture : Disabled
Min. Purge Level : DEBUG
Purge Older Than : 7 days
Pref by client_id expire : 12 hours
For all client info see : logger_prefs_by_client_id
PL/SQL procedure successfully completed.
#要啟用此選項,請將dbms_flashback上的execute授予擁有記錄器包的用戶。logger_logs中的每個插入都將包含SCN(系統提交編號)。這允許您將會話閃回到發生錯誤的時間,以幫助調試它甚至撤消任何數據損壞。作為SYS來自sql * plus:
[oracle@xag182 logger]$ sql sys/[email protected]:1521/PDB1 as sysdba
SQL> grant execute on dbms_flashback to logger_user;
[oracle@xag182 logger]$ sql logger_user/[email protected]:1521/PDB1
SQL> set serveroutput on
SQL> exec logger_configure;
SQL> exec logger.status
Project Home Page : https://github.com/oraopensource/logger/
Logger Version : 3.1.1
Debug Level : DEBUG
Capture Call Stack : TRUE
Protect Admin Procedures : TRUE
APEX Tracing : Enabled
SCN Capture : Enabled
Min. Purge Level : DEBUG
Purge Older Than : 7 days
Pref by client_id expire : 12 hours
For all client info see : logger_prefs_by_client_id
[oracle@xag182 logger]$ sql apex/[email protected]:1521/PDB1
SQL> set serveroutput on
SQL> exec logger.status
Project Home Page : https://github.com/oraopensource/logger/
Logger Version : 3.1.1
Debug Level : DEBUG
Capture Call Stack : TRUE
Protect Admin Procedures : TRUE
APEX Tracing : Enabled
SCN Capture : Enabled
Min. Purge Level : DEBUG
Purge Older Than : 7 days
Pref by client_id expire : 12 hours
For all client info see : logger_prefs_by_client_id
維護 默認情況下,DBMS_SCHEDULER作業“LOGGER_PURGE_JOB”每晚凌晨1:00運行,並刪除任何超過7天的錯誤級別為*g_debug*或更高的*日誌*,其中包括*g_debug*和*g_timing*。這意味著永遠不會清除任何較低級別的日誌,例如*g_error*或*g_permanent*。您也可以使用*logger.purge_all*手動清除所有日誌,但這不會刪除錯誤級別為*g_permanent的*日誌。 從2.0.0開始,引入了一個新作業*LOGGER_UNSET_PREFS_BY_CLIENT*以刪除[客戶端特定的日誌記錄]。默認情況下,此作業每小時運行一次。
APEX 此選項允許您調用logger.log_apex_items,它從當前會話中獲取所有APEX項的名稱和值,並將它們存儲在logger_logs_apex_items表中。這在調試APEX問題時非常有用。如果在數據庫中安裝了APEX,則logger_configure會自動啟用此選項。
喜好
Logger將其配置設置存儲在LOGGER_PREFS中。這些是以下首選項:
偏愛 | 描述 |
---|---|
GLOBAL_CONTEXT_NAME | Logger用於保存值的上下文。建議不要修改此設置。 |
INCLUDE_CALL_STACK | 存儲調用堆棧。注意客戶端特定設置可以覆蓋此。 |
INSTALL_SCHEMA | 安裝Logger的架構。不要修改。 |
LEVEL | 當前架構Logger級別。 |
LOGGER_VERSION | Logger的當前版本。不要修改它,因為它可能會影響將來的遷移。 |
PREF_BY_CLIENT_ID_EXPIRE_HOURS | 設置客戶端特定日誌記錄級別的默認時間(以小時為單位)。 |
PROTECT_ADMIN_PROCS | 如果為TRUE,那麼只有在INSTALL_SCHEMA中定義的用戶才能運行privilidged過程。 |
PURGE_AFTER_DAYS | 在這麼多天之後,清除等於或高於PURGE_MIN_LEVEL的日誌。每晚清洗工作都要清理記錄器。 |
PURGE_MIN_LEVEL | 最低級別清除自動記錄器清理作業中使用的日誌。 |
SQL> select * from LOGGER_PREFS;
PREF_NAME PREF_VALUE PREF_TYPE
LOGGER_DEBUG FALSE LOGGER
PREF_BY_CLIENT_ID_EXPIRE_HOURS 12 LOGGER
PLUGIN_FN_ERROR NONE LOGGER
PURGE_MIN_LEVEL DEBUG LOGGER
INCLUDE_CALL_STACK TRUE LOGGER
INSTALL_SCHEMA LOGGER_USER LOGGER
LEVEL DEBUG LOGGER
PURGE_AFTER_DAYS 7 LOGGER
PROTECT_ADMIN_PROCS TRUE LOGGER
LOGGER_VERSION 3.1.1 LOGGER
GLOBAL_CONTEXT_NAME LOGGER_USER_LOGCTX LOGGER
測試1
[oracle@xag182 logger]$ sql apex/[email protected]:1521/PDB1
SQL> exec logger.log('hello world');
SQL>
select t.id,t.logger_level,substr(t.text,1,30) as text,to_char(t.time_stamp,'yyyy-mm-dd hh24:mi:ss') as create_time,t.user_name,t.sid from logger_logs t;
ID LOGGER_LEVEL TEXT CREATE_TIME USER_NAME SID
1 8 Log level set to DEBUG for cli 2019-02-12 15:57:04 LOGGER_USER 38
2 1 Logger version 3.1.1 installed 2019-02-12 15:57:04 LOGGER_USER 38
3 16 hello world 2019-02-12 16:59:17 APEX 35
測試2
declare
l_scope logger_logs.scope%type := 'demo.params';
-- Simulates parameters
l_num number := 1;
l_date date := sysdate;
l_boolean boolean := false;
l_params logger.tab_param;
begin
logger.append_param(l_params, 'l_num', l_num);
logger.append_param(l_params, 'l_date', l_date);
logger.append_param(l_params, 'l_boolean', l_boolean);
logger.log('START', l_scope, null, l_params);
logger.log('END', l_scope);
end;
/
SQL>
select t.id,t.logger_level,substr(t.text,1,30) as text,to_char(t.time_stamp,'yyyy-mm-dd hh24:mi:ss') as create_time,t.user_name,t.sid,t.extra
from logger_logs t where t.scope = 'demo.params' order by 1 desc;
ID LOGGER_LEVEL TEXT CREATE_TIME USER_NAME SID EXTRA
5 16 END 2019-02-12 17:11:15 APEX 35
4 16 START 2019-02-12 17:11:15 APEX 35
*** Parameters ***
l_num: 1
l_date: 12-FEB-2019 17:11:15
l_boolean: FALSE
測試3
CREATE OR REPLACE PACKAGE TEST_LOGGER
As
procedure LOGGER_PROC(v1 number,v2 number);
END TEST_LOGGER;
/
CREATE OR REPLACE PACKAGE BODY TEST_LOGGER
As
gc_scope_prefix constant varchar2(31) := lower($$plsql_unit) || '.';
procedure LOGGER_PROC(v1 number,v2 number)
Is
l_scope logger_logs.scope%type := gc_scope_prefix || 'LOGGER_PROC';
l_params logger.tab_param;
v3 number;
begin
logger.append_param(l_params, 'v1', v1);
logger.append_param(l_params, 'v2', v2);
logger.log('START', l_scope, null, l_params);
v3:=v1/v2;
logger.log('END', l_scope);
exception When Others Then
rollback;
logger.log_error(Sqlerrm, l_scope, null, l_params);
--raise;
end LOGGER_PROC;
END TEST_LOGGER;
/
begin
test_logger.logger_proc(10,5);
end;
begin
test_logger.logger_proc(10,0);
end;
SQL>
select t.scope,t.id,t.logger_level,substr(t.text,1,30) as text,to_char(t.time_stamp,'yyyy-mm-dd hh24:mi:ss') as create_time,t.user_name,t.sid,t.extra
from logger_logs t where t.scope = 'test_logger.logger_proc' order by 1 desc;
SCOPE ID LOGGER_LEVEL TEXT CREATE_TIME USER_NAME SID EXTRA
test_logger.logger_proc 6 16 START 2019-02-12 17:40:48 APEX 25
*** Parameters ***
v1: 10
v2: 5
test_logger.logger_proc 7 16 END 2019-02-12 17:40:48 APEX 25
test_logger.logger_proc 8 16 START 2019-02-12 17:41:35 APEX 25
*** Parameters ***
v1: 10
v2: 0
test_logger.logger_proc 9 2 ORA-01476: divisor is equal to 2019-02-12 17:41:35 APEX 25
*** Parameters ***
v1: 10
v2: 0
測試4
SQL>
declare
l_log boolean;
l_log_str varchar2(255);
begin
l_log := logger.ok_to_log(logger.g_warning); -- Just change this with the level you want to test
if l_log then
l_log_str := 'TRUE';
else
l_log_str := 'FALSE';
end if;
dbms_output.put_line('Ok to log? ' || l_log_str);
end;
/
Ok to log? TRUE
測試5
[oracle@xag182 logger]$ sql logger_user/[email protected]:1521/PDB1
SQL> exec logger.set_level(logger.g_debug);
SQL> exec logger.log('test, this should show up');
SQL> SET SQLFORMAT ansiconsole
SQL>
select t.scope,t.id,t.logger_level,substr(t.text,1,30) as text,to_char(t.time_stamp,'yyyy-mm-dd hh24:mi:ss') as create_time,t.user_name,t.sid
from logger_logs_5_min t order by id desc;
SCOPE ID LOGGER_LEVEL TEXT CREATE_TIME USER_NAME SID
13 16 test, this should show up 2019-02-12 18:46:56 LOGGER_USER 35
SQL> exec logger.set_level (logger.g_error);
SQL> exec logger.log('test, this should not show up');
SQL> select t.scope,t.id,t.logger_level,substr(t.text,1,30) as text,to_char(t.time_stamp,'yyyy-mm-dd hh24:mi:ss') as create_time,t.user_name,t.sid
2 from logger_logs_5_min t order by id desc;
SCOPE ID LOGGER_LEVEL TEXT CREATE_TIME USER_NAME SID
14 8 Log level set to ERROR for cli 2019-02-12 18:50:08 LOGGER_USER 35
13 16 test, this should show up 2019-02-12 18:46:56 LOGGER_USER 35
-- In a different client run the following
exec dbms_session.set_identifier('logger_demo_session');
exec logger.set_level(logger.g_debug, sys_context('userenv','client_identifier'));
exec logger.log('test, this should show up for client_id: ' || sys_context('userenv','client_identifier'));
SQL> select t.scope,t.id,t.logger_level,substr(t.text,1,30) as text,to_char(t.time_stamp,'yyyy-mm-dd hh24:mi:ss') as create_time,t.user_name,t.sid
2* from logger_logs_5_min t order by id desc;
SCOPE ID LOGGER_LEVEL TEXT CREATE_TIME USER_NAME SID
16 16 test, this should show up for 2019-02-12 18:53:33 LOGGER_USER 35
15 8 Log level set to DEBUG for cli 2019-02-12 18:53:24 LOGGER_USER 35
14 8 Log level set to ERROR for cli 2019-02-12 18:50:08 LOGGER_USER 35
-- In main client run the following
exec logger.log('this should not show up since the global config is error');
SQL> select t.scope,t.id,t.logger_level,substr(t.text,1,30) as text,to_char(t.time_stamp,'yyyy-mm-dd hh24:mi:ss') as create_time,t.user_name,t.sid
2* from logger_logs_5_min t order by id desc;
SCOPE ID LOGGER_LEVEL TEXT CREATE_TIME USER_NAME SID
17 16 this should not show up since 2019-02-12 18:55:23 LOGGER_USER 35
16 16 test, this should show up for 2019-02-12 18:53:33 LOGGER_USER 35
15 8 Log level set to DEBUG for cli 2019-02-12 18:53:24 LOGGER_USER 35
-- In other client clear identifier to return to global config
exec dbms_session.clear_identifier;
-- Unset all client specific level settings
exec logger.unset_client_level_all;
-- TODO move to seperate file?
-- How does this work for batches?
[oracle@xag182 ~]$ sql sys/[email protected]:1521/PDB1 as sysdba
SQL> grant execute on dbms_lock to logger_user;
[oracle@xag182 ~]$ sql logger_user/[email protected]:1521/PDB1
SQL> SET SQLFORMAT ansiconsole
create or replace procedure run_long_batch(
p_client_id in varchar2,
p_iterations in pls_integer)
as
l_params logger.tab_param;
l_scope logger_logs.scope%type := 'run_long_batch';
begin
logger.append_param(l_params, 'p_client_id', p_client_id);
logger.append_param(l_params, 'p_iterations', p_iterations);
logger.log('START', l_scope, null, l_params);
dbms_session.set_identifier(p_client_id);
for i in 1..p_iterations loop
logger.log('i: ' || i, l_scope);
dbms_lock.sleep(1);
end loop;
logger.log('END');
end run_long_batch;
/
-- Setup
begin
delete from logger_logs;
logger.set_level(logger.g_error); -- Simulates Production
logger.unset_client_level_all;
commit;
end;
/
-- In SQL Plus
begin
run_long_batch(p_client_id => 'in_sqlplus', p_iterations => 50);
end;
/
-- In SQL Dev
exec logger.set_level(logger.g_debug, 'in_sqlplus');
exec logger.unset_client_level('in_sqlplus');
exec logger.set_level(logger.g_debug, 'in_sqlplus');
exec logger.unset_client_level('in_sqlplus');
SQL> select t.scope,t.id,t.logger_level,substr(t.text,1,30) as text,to_char(t.time_stamp,'yyyy-mm-dd hh24:mi:ss') as create_time,t.user_name,t.sid
2* from logger_logs_5_min t order by id desc;
SCOPE ID LOGGER_LEVEL TEXT CREATE_TIME USER_NAME SID
run_long_batch 43 16 i: 48 2019-02-12 19:06:55 LOGGER_USER 35
run_long_batch 42 16 i: 47 2019-02-12 19:06:54 LOGGER_USER 35
run_long_batch 41 16 i: 46 2019-02-12 19:06:53 LOGGER_USER 35
run_long_batch 40 16 i: 45 2019-02-12 19:06:52 LOGGER_USER 35
run_long_batch 39 16 i: 44 2019-02-12 19:06:51 LOGGER_USER 35
run_long_batch 38 16 i: 43 2019-02-12 19:06:50 LOGGER_USER 35
run_long_batch 37 16 i: 42 2019-02-12 19:06:49 LOGGER_USER 35
run_long_batch 36 16 i: 41 2019-02-12 19:06:48 LOGGER_USER 35
run_long_batch 35 16 i: 40 2019-02-12 19:06:47 LOGGER_USER 35
run_long_batch 34 16 i: 39 2019-02-12 19:06:46 LOGGER_USER 35
33 8 Log level set to DEBUG for cli 2019-02-12 19:06:46 LOGGER_USER 799
run_long_batch 32 16 i: 28 2019-02-12 19:06:35 LOGGER_USER 35
run_long_batch 31 16 i: 27 2019-02-12 19:06:34 LOGGER_USER 35
run_long_batch 30 16 i: 26 2019-02-12 19:06:33 LOGGER_USER 35
run_long_batch 29 16 i: 25 2019-02-12 19:06:32 LOGGER_USER 35
run_long_batch 28 16 i: 24 2019-02-12 19:06:31 LOGGER_USER 35
run_long_batch 27 16 i: 23 2019-02-12 19:06:30 LOGGER_USER 35
run_long_batch 26 16 i: 22 2019-02-12 19:06:29 LOGGER_USER 35
run_long_batch 25 16 i: 21 2019-02-12 19:06:28 LOGGER_USER 35
run_long_batch 24 16 i: 20 2019-02-12 19:06:27 LOGGER_USER 35
run_long_batch 23 16 i: 19 2019-02-12 19:06:26 LOGGER_USER 35
run_long_batch 22 16 i: 18 2019-02-12 19:06:25 LOGGER_USER 35
run_long_batch 21 16 i: 17 2019-02-12 19:06:24 LOGGER_USER 35
run_long_batch 20 16 i: 16 2019-02-12 19:06:23 LOGGER_USER 35
19 8 Log level set to DEBUG for cli 2019-02-12 19:06:23 LOGGER_USER 799
18 8 Log level set to ERROR for cli 2019-02-12 19:05:51 LOGGER_USER 35
26 rows selected.
-- Reset Logging Level
exec logger.set_level(logger.g_debug);