Skip to content

Commit ee8a47a

Browse files
committed
#127: Add logger_prefs.pref_type
1 parent 4765cf8 commit ee8a47a

12 files changed

Lines changed: 379 additions & 182 deletions

File tree

build/build.sh

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,6 @@ printf 'PROMPT tables/logger_prefs_by_client_id.sql \n' | tee -a $INSTALL $NO_OP
8585
cat ../source/tables/logger_prefs_by_client_id.sql | tee -a $INSTALL $NO_OP > /dev/null
8686
printf '\n' | tee -a $INSTALL $NO_OP > /dev/null
8787

88-
89-
#CONTEXTS
90-
printf 'PROMPT contexts/logger_context.sql \n' >> $INSTALL
91-
cat ../source/contexts/logger_context.sql >> $INSTALL
92-
printf '\n' >> $INSTALL
93-
9488
#JOBS
9589
printf 'PROMPT jobs/logger_purge_job.sql \n' >> $INSTALL
9690
cat ../source/jobs/logger_purge_job.sql >> $INSTALL
@@ -119,6 +113,14 @@ cat ../source/packages/logger.pkb >> $INSTALL
119113
printf '\n' >> $INSTALL
120114

121115

116+
#Recompile logger_prefs trigger as it has dependencies on logger.pks
117+
printf 'PROMPT Recompile biu_logger_prefs after logger.pkb \n' >> $INSTALL
118+
printf '\nalter trigger biu_logger_prefs compile;\n' | tee -a $INSTALL $NO_OP > /dev/null
119+
120+
#CONTEXTS
121+
printf 'PROMPT contexts/logger_context.sql \n' >> $INSTALL
122+
cat ../source/contexts/logger_context.sql >> $INSTALL
123+
printf '\n' >> $INSTALL
122124

123125
#PROCEDURES
124126
printf 'PROMPT procedures/logger_configure.plb \n' >> $INSTALL
@@ -151,7 +153,6 @@ printf '\n\n' >> $NO_OP
151153
#Recompile logger_logs_terse since it depends on logger
152154
printf '\nalter view logger_logs_terse compile;\n' | tee -a $INSTALL $NO_OP > /dev/null
153155

154-
155156
#Copy "other" scripts
156157
cp -f ../source/install/create_user.sql $RELEASE_FOLDER
157158
cp -f ../source/install/drop_logger.sql $RELEASE_FOLDER

demos/demo_plugin.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ exec logger.set_level(p_level => logger.g_debug);
1515

1616
update logger_prefs
1717
set pref_value = 'log_test_plugin'
18-
where pref_name = 'PLUGIN_FN_ERROR';
18+
where 1=1
19+
and pref_type = 'LOGGER'
20+
and pref_name = 'PLUGIN_FN_ERROR';
1921

2022
exec logger_configure;
2123

docs/Logger API.md

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -736,12 +736,13 @@ TODO
736736

737737
<a name="procedure-get_pref"></a>
738738
###GET_PREF
739-
Returns the preference from LOGGER_PREFS.
739+
Returns the preference from LOGGER_PREFS. If `p_pref_type` is not defined then the system level preferences will be returned.
740740

741741
####Syntax
742742
```sql
743743
logger.get_pref(
744-
p_pref_name in varchar2)
744+
p_pref_name in logger_prefs.pref_name%type,
745+
p_pref_type in logger_prefs.pref_type%type default logger.g_pref_type_logger)
745746
return varchar2
746747
```
747748

@@ -755,7 +756,11 @@ logger.get_pref(
755756
<td>p_pref_name</td>
756757
<td>Preference to get value for.</td>
757758
</tr>
758-
<tr>
759+
<tr>
760+
<td>p_pref_type</td>
761+
<td>Preference type</td>
762+
</tr>
763+
<tr>
759764
<td>return</td>
760765
<td>Prefence value.</td>
761766
</tr>
@@ -767,19 +772,20 @@ dbms_output.put_line('Logger level: ' || logger.get_pref('LEVEL'));
767772
```
768773

769774

770-
<a name="procedure-set_cust_pref"></a>
771-
###SET_CUST_PREF
775+
<a name="procedure-set_pref"></a>
776+
###SET_PREF
772777
In some cases you may want to store custom preferences in the `LOGGER_PREFS` table. A use case for this would be when creating a plugin that needs to reference some parameters.
773778

774-
This procedure allows you to leverage the `LOGGER_PREFS` table to store your custom preferences. To avoid any naming comflicts with Logger, all custom preferences must be prefixed with `CUST_`.
779+
This procedure allows you to leverage the `LOGGER_PREFS` table to store your custom preferences. To avoid any naming conflicts with Logger, you must use a type (defined in `p_pref_type`). You can not use the type `LOGGER` as it is reserved for Logger system preferences.
775780

776-
`SET_CUST_PREF` will either create or udpate a value. Values must contain data. If not, use [`DEL_CUST_PREF`](#procedure-del_cust_pref) to delete unused preferences.
781+
`SET_PREF` will either create or udpate a value. Values must contain data. If not, use [`DEL_PREF`](#procedure-del_pref) to delete unused preferences.
777782

778783
####Syntax
779784
```sql
780-
logger.set_cust_pref(
781-
p_pref_name in logger_prefs.pref_name%type,
782-
p_pref_value in logger_prefs.pref_value%type)
785+
logger.set_pref(
786+
p_pref_type in logger_prefs.pref_type%type,
787+
p_pref_name in logger_prefs.pref_name%type,
788+
p_pref_value in logger_prefs.pref_value%type);
783789
```
784790

785791
####Parameters
@@ -788,32 +794,38 @@ logger.set_cust_pref(
788794
<th>Prameter</th>
789795
<th>Description</th>
790796
</tr>
797+
<tr>
798+
<td>p_pref_type</td>
799+
<td>Type of preference. Use your own name space to avoid conflicts with Logger. Types will automatically be converted to uppercase</td>
800+
</tr>
791801
<tr>
792802
<td>p_pref_name</td>
793803
<td>Preference to get value for. Must be prefixed with "CUST_". Value will be created or updated. This value will be stored as uppercase.</td>
794804
</tr>
795-
<tr>
805+
<tr>
796806
<td>p_pref_value</td>
797807
<td>Prefence value.</td>
798808
</tr>
799809
</table>
800810

801811
####Example
802812
```sql
803-
logger.set_cust_pref(
804-
p_pref_name => 'CUST_MY_PREF',
813+
logger.set_pref(
814+
p_pref_type => 'CUSTOM'
815+
p_pref_name => 'MY_PREF',
805816
p_pref_value => 'some value');
806817
```
807818

808819

809-
<a name="procedure-del_cust_pref"></a>
810-
###DEL_CUST_PREF
811-
Deletes a custom preference.
820+
<a name="procedure-del_pref"></a>
821+
###DEL_PREF
822+
Deletes a preference except for system level preferences.
812823

813824
####Syntax
814825
```sql
815-
logger.del_cust_pref(
816-
p_pref_name in logger_prefs.pref_name%type);
826+
logger.del_pref(
827+
p_pref_type in logger_prefs.pref_type%type,
828+
p_pref_name in logger_prefs.pref_name%type);
817829
```
818830

819831
####Parameters
@@ -822,6 +834,10 @@ logger.del_cust_pref(
822834
<th>Prameter</th>
823835
<th>Description</th>
824836
</tr>
837+
<tr>
838+
<td>p_pref_type</td>
839+
<td>Namepsace / type of preference.</td>
840+
</tr>
825841
<tr>
826842
<td>p_pref_name</td>
827843
<td>Custom preference to delete.</td>
@@ -830,8 +846,9 @@ logger.del_cust_pref(
830846

831847
####Example
832848
```sql
833-
logger.del_cust_pref(
834-
p_pref_name => 'CUST_MY_PREF');
849+
logger.del_pref(
850+
p_pref_type => 'CUSTOM'
851+
p_pref_name => 'MY_PREF');
835852
```
836853

837854

docs/Plugins.md

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,18 @@ There are two steps to configure a plugin. The first is to register a custom fun
3030
```sql
3131
update logger_prefs
3232
set pref_value = 'custom_plugin_method'
33-
where pref_name = 'PLUGIN_FN_ERROR'
33+
where 1=1
34+
and pref_type = logger.g_pref_type_logger
35+
and pref_name = 'PLUGIN_FN_ERROR'
3436
```
3537

36-
Once the custom method has been set in the ```logger_prefs table```, you must run the ```logger_configure``` procedure which will recompile Logger.
38+
Once the custom method has been set in the `logger_prefs table`, you must run the `logger_configure` procedure which will recompile Logger.
3739

3840
```sql
3941
exec logger_configure;
4042
```
4143

42-
To deregister a plugin, set the appropriate ```logger_prefs.pref_value``` to ```null``` and re-run the ```logger_configure``` procedure. *Note: since ```pref_value``` is not a nullable column, null values will be automatically converted to "NONE".*
44+
To deregister a plugin, set the appropriate `logger_prefs.pref_value` to `null` and re-run the `logger_configure` procedure. *Note: since `pref_value` is not a nullable column, null values will be automatically converted to "NONE".*
4345

4446
<a name="plugin-interface"></a>
4547
#Plugin Interface
@@ -50,7 +52,7 @@ procedure <name_of_procedure>(
5052
p_rec in logger.rec_logger_log)
5153
```
5254

53-
For more information about the ```logger.rec_logger_log``` type please see the [Types documentation](Logger%20API.md#types).
55+
For more information about the `logger.rec_logger_log` type please see the [Types documentation](Logger%20API.md#types).
5456

5557
<a name="example"></a>
5658
#Example
@@ -69,14 +71,14 @@ as
6971
begin
7072
dbms_output.put_line('In Plugin');
7173
dbms_output.put_line('p_rec.id: ' || p_rec.id);
72-
74+
7375
select text
7476
into l_text
7577
from logger_logs_5_min
7678
where id = p_rec.id;
77-
79+
7880
dbms_output.put_line('Text: ' || l_text);
79-
81+
8082
end;
8183
/
8284
```
@@ -88,7 +90,9 @@ end;
8890
-- Register new plugin procedure for errors
8991
update logger_prefs
9092
set pref_value = 'log_test_plugin'
91-
where pref_name = 'PLUGIN_FN_ERROR';
93+
where 1=1
94+
and pref_type = logger.g_pref_type_logger
95+
and pref_name = 'PLUGIN_FN_ERROR';
9296

9397
-- Configure with Logger
9498
exec logger_configure;
@@ -123,8 +127,8 @@ as
123127
l_text logger_logs.text%type;
124128
begin
125129
dbms_output.put_line('In Plugin');
126-
127-
-- This will not trigger the plugin to be
130+
131+
-- This will not trigger the plugin to be
128132
-- run again since called inside the plugin
129133
logger.log_error('will not trigger plugin');
130134
end;
@@ -150,8 +154,8 @@ as
150154
l_text logger_logs.text%type;
151155
begin
152156
dbms_output.put_line('In Plugin');
153-
154-
raise_application_error(-20001, 'test error');
157+
158+
raise_application_error(-20001, 'test error');
155159
end;
156160
/
157161

source/contexts/logger_context.sql

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1-
declare
2-
-- the following line is also used in a constant declaration in logger.pkb
1+
declare
2+
-- the following line is also used in a constant declaration in logger.pkb
33
l_ctx_name varchar2(35) := substr(sys_context('USERENV','CURRENT_SCHEMA'),1,23)||'_LOGCTX';
44
begin
55
execute immediate 'create or replace context '||l_ctx_name||' using logger accessed globally';
6-
6+
77
merge into logger_prefs p
8-
using (select 'GLOBAL_CONTEXT_NAME' PREF_NAME, l_ctx_name PREF_VALUE from dual) d
9-
on (p.pref_name = d.pref_name)
10-
when matched then
8+
using (select 'GLOBAL_CONTEXT_NAME' pref_name, l_ctx_name pref_value, logger.g_pref_type_logger pref_type from dual) d
9+
on (1=1
10+
and p.pref_type = d.pref_type
11+
and p.pref_name = d.pref_name)
12+
when matched then
1113
update set p.pref_value = d.pref_value
12-
when not matched then
13-
insert (p.pref_name,p.pref_value)
14-
values (d.pref_name,d.pref_value);
14+
when not matched then
15+
insert (p.pref_name, p.pref_value, p.pref_type)
16+
values (d.pref_name, d.pref_value, d.pref_type);
1517
end;
16-
/
18+
/

source/install/post_install_configuration.sql

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,32 @@ end;
1010
PROMPT Setting Logger Level
1111
declare
1212
l_current_level logger_prefs.pref_value%type;
13-
begin
13+
begin
1414

1515
select pref_value
1616
into l_current_level
1717
from logger_prefs
18-
where pref_name = 'LEVEL';
19-
18+
where 1=1
19+
and pref_type = logger.g_pref_type_logger
20+
and pref_name = 'LEVEL';
21+
2022
-- Note: Probably not necessary but pre 1.4.0 code had this in place
21-
logger.set_level(l_current_level);
23+
logger.set_level(l_current_level);
2224
end;
2325
/
2426

25-
prompt
26-
prompt *************************************************
27+
prompt
28+
prompt *************************************************
2729
prompt Now executing LOGGER.STATUS...
28-
prompt
30+
prompt
2931

30-
begin
31-
logger.status;
32+
begin
33+
logger.status;
3234
end;
3335
/
3436

35-
prompt *************************************************
36-
begin
37-
logger.log_permanent('Logger version '||logger.get_pref('LOGGER_VERSION')||' installed.');
37+
prompt *************************************************
38+
begin
39+
logger.log_permanent('Logger version '||logger.get_pref('LOGGER_VERSION')||' installed.');
3840
end;
3941
/

0 commit comments

Comments
 (0)