Skip to content

Commit c733bf7

Browse files
Switch to using domain filtering not log_type (martinsumner#483)
* Switch to using domain filtering not log_type This looks like it is a more correct way of doing this. Given we have no agreed hierarchy as part of OpenRiak, will use [backend, leveled] as a start. * Align log format with Erlang standards The leveled_log code is not aligned well with the expectations of riak kernel logger. In particular log function calls were centralised, and so MFA metadata is irrelevant. This change implements the log function calls as a macro, so that the should_i_log logic cna be maintained, but MFA metadata will be correctly present in the log. It also ends the practice of adding the pid() directly to the log, instead relying on the metadata * Format via erlfmt * ensure logger:allow/2 is called Will be filtered by global and ?MODULE log filters. Outstanding code coverage issue caused by detecting `false` branch when macro is substituted over multiple lines. * Add missing space to logs with no db_id * Coverage code coverage is an issue with the switch to macros for logging. Not every log line will have a `false` from the log allow - and that will fail code coverage ... but only if the log covers multiple lines. Most logs covering multiple lines, do do needlessly. So avoid the code coverage issue by making those logs single line. * Update include/leveled.hrl Co-authored-by: Thomas Arts <thomas.arts@quviq.com> * Updates post review * Remove unused get_log Code uses get_loglevel/1 --------- Co-authored-by: Thomas Arts <thomas.arts@quviq.com>
1 parent f935a89 commit c733bf7

18 files changed

Lines changed: 345 additions & 292 deletions

include/leveled.hrl

Lines changed: 88 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
-include_lib("kernel/include/logger.hrl").
2+
13
%%%============================================================================
24
%%% File paths
35
%%%============================================================================
@@ -81,11 +83,96 @@
8183
-define(EQC_TIME_BUDGET, 120).
8284

8385
%%%============================================================================
84-
%%% Helper Function
86+
%%% Helper Functions
8587
%%%============================================================================
8688

8789
-define(IS_DEF(Attribute), Attribute =/= undefined).
8890

91+
-define(LOG_LOCATION, #{
92+
mfa => {?MODULE, ?FUNCTION_NAME, ?FUNCTION_ARITY},
93+
line => ?LINE,
94+
file => ?FILE
95+
}).
96+
97+
-define(STD_LOG(LogRef, Subs),
98+
?STD_LOG_INT(
99+
leveled_log:get_loglevel(LogRef),
100+
LogRef,
101+
Subs,
102+
leveled_log:get_opts()
103+
)
104+
).
105+
106+
%% Erlang apply is used because a variable list of arguments is provided
107+
-define(STD_LOG_INT(LogLevel, LogRef, Subs, LogOpts),
108+
case
109+
logger:allow(LogLevel, ?MODULE) andalso
110+
leveled_log:should_i_log(LogLevel, LogRef, LogOpts)
111+
of
112+
true ->
113+
erlang:apply(
114+
logger,
115+
macro_log,
116+
[
117+
?LOG_LOCATION
118+
| leveled_log:log(LogLevel, LogRef, LogOpts, Subs)
119+
]
120+
);
121+
false ->
122+
ok
123+
end
124+
).
125+
126+
-define(RND_LOG(LogRef, Subs, StartTime, RandomProb),
127+
case rand:uniform() < RandomProb of
128+
true ->
129+
?TMR_LOG_INT(
130+
leveled_log:get_loglevel(LogRef),
131+
LogRef,
132+
Subs,
133+
leveled_log:get_opts(),
134+
StartTime
135+
);
136+
false ->
137+
ok
138+
end
139+
).
140+
141+
-define(TMR_LOG(LogRef, Subs, StartTime),
142+
?TMR_LOG_INT(
143+
leveled_log:get_loglevel(LogRef),
144+
LogRef,
145+
Subs,
146+
leveled_log:get_opts(),
147+
StartTime
148+
)
149+
).
150+
151+
-define(TMR_LOG_INT(LogLevel, LogRef, Subs, LogOpts, StartTime),
152+
case
153+
logger:allow(LogLevel, ?MODULE) andalso
154+
leveled_log:should_i_log(LogLevel, LogRef, LogOpts)
155+
of
156+
true ->
157+
erlang:apply(
158+
logger,
159+
macro_log,
160+
[
161+
?LOG_LOCATION
162+
| leveled_log:log_timer(
163+
LogLevel,
164+
LogRef,
165+
LogOpts,
166+
Subs,
167+
StartTime
168+
)
169+
]
170+
);
171+
false ->
172+
ok
173+
end
174+
).
175+
89176
-if(?OTP_RELEASE < 26).
90177
-type dynamic() :: any().
91178
-endif.

src/leveled_bookie.erl

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -787,7 +787,7 @@ book_indexfold(Pid, Bucket, FoldAccT, Range, TermHandling) ->
787787
% future release this code branch may be removed, and such queries may
788788
% instead return `error`. For now null is assumed to be lower than any
789789
% key
790-
leveled_log:log(b0019, [Bucket]),
790+
?STD_LOG(b0019, [Bucket]),
791791
book_indexfold(Pid, {Bucket, null}, FoldAccT, Range, TermHandling).
792792

793793
-type query() ::
@@ -1377,7 +1377,7 @@ init([Opts]) ->
13771377
% and performance may be unpredictable
13781378
case CacheRatio > 32 of
13791379
true ->
1380-
leveled_log:log(b0020, [PCLMaxSize, ConfiguredCacheSize]);
1380+
?STD_LOG(b0020, [PCLMaxSize, ConfiguredCacheSize]);
13811381
false ->
13821382
ok
13831383
end,
@@ -1406,7 +1406,7 @@ init([Opts]) ->
14061406
{Inker, Penciller} = startup(InkerOpts, PencillerOpts0),
14071407

14081408
NewETS = ets:new(mem, [ordered_set]),
1409-
leveled_log:log(b0001, [Inker, Penciller]),
1409+
?STD_LOG(b0001, [Inker, Penciller]),
14101410
{ok, #state{
14111411
cache_size = CacheSize,
14121412
cache_multiple = MaxCacheMultiple,
@@ -1424,7 +1424,7 @@ init([Opts]) ->
14241424
BookieMonitor = erlang:monitor(process, Bookie),
14251425
NewETS = ets:new(mem, [ordered_set]),
14261426
{HeadOnly, Lookup} = leveled_bookie:book_headstatus(Bookie),
1427-
leveled_log:log(b0002, [Inker, Penciller]),
1427+
?STD_LOG(b0002, [Inker, Penciller]),
14281428
{ok, #state{
14291429
penciller = Penciller,
14301430
inker = Inker,
@@ -1729,7 +1729,7 @@ handle_call(
17291729
handle_call(destroy, _From, State = #state{is_snapshot = Snp}) when
17301730
Snp == false
17311731
->
1732-
leveled_log:log(b0011, []),
1732+
?STD_LOG(b0011, []),
17331733
{ok, InkPathList} = leveled_inker:ink_doom(State#state.inker),
17341734
{ok, PCLPathList} = leveled_penciller:pcl_doom(State#state.penciller),
17351735
leveled_monitor:monitor_close(element(1, State#state.monitor)),
@@ -1794,13 +1794,13 @@ handle_info(
17941794
{'DOWN', BookieMonRef, process, BookiePid, Info},
17951795
State = #state{bookie_monref = BookieMonRef, is_snapshot = true}
17961796
) ->
1797-
leveled_log:log(b0004, [BookiePid, Info]),
1797+
?STD_LOG(b0004, [BookiePid, Info]),
17981798
{stop, normal, State};
17991799
handle_info(_Info, State) ->
18001800
{noreply, State}.
18011801

18021802
terminate(Reason, _State) ->
1803-
leveled_log:log(b0003, [Reason]).
1803+
?STD_LOG(b0003, [Reason]).
18041804

18051805
code_change(_OldVsn, State, _Extra) ->
18061806
{ok, State}.
@@ -1854,7 +1854,7 @@ push_to_penciller(Penciller, LoadItemList, LedgerCache, ReloadStrategy) ->
18541854
),
18551855
case length(UpdLedgerCache#ledger_cache.load_queue) of
18561856
N when N > ?LOADING_BATCH ->
1857-
leveled_log:log(b0006, [UpdLedgerCache#ledger_cache.max_sqn]),
1857+
?STD_LOG(b0006, [UpdLedgerCache#ledger_cache.max_sqn]),
18581858
ok =
18591859
push_to_penciller_loop(
18601860
Penciller, loadqueue_ledgercache(UpdLedgerCache)
@@ -1990,7 +1990,7 @@ startup(InkerOpts, PencillerOpts) ->
19901990
{ok, Inker} = leveled_inker:ink_start(InkerOpts),
19911991
{ok, Penciller} = leveled_penciller:pcl_start(PencillerOpts),
19921992
LedgerSQN = leveled_penciller:pcl_getstartupsequencenumber(Penciller),
1993-
leveled_log:log(b0005, [LedgerSQN]),
1993+
?STD_LOG(b0005, [LedgerSQN]),
19941994
ReloadStrategy = InkerOpts#inker_options.reload_strategy,
19951995
LoadFun = get_loadfun(),
19961996
BatchFun =
@@ -2001,7 +2001,7 @@ startup(InkerOpts, PencillerOpts) ->
20012001
end,
20022002
InitAccFun =
20032003
fun(FN, CurrentMinSQN) ->
2004-
leveled_log:log(i0014, [FN, CurrentMinSQN]),
2004+
?STD_LOG(i0014, [FN, CurrentMinSQN]),
20052005
[]
20062006
end,
20072007
FinalAcc =
@@ -2525,7 +2525,7 @@ return_ledger_keyrange(Tag, Bucket, KeyRange) ->
25252525
maybe_longrunning(SW, Aspect) ->
25262526
case timer:now_diff(os:timestamp(), SW) of
25272527
N when N > ?LONG_RUNNING ->
2528-
leveled_log:log(b0013, [N, Aspect]);
2528+
?STD_LOG(b0013, [N, Aspect]);
25292529
_ ->
25302530
ok
25312531
end.

src/leveled_cdb.erl

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -476,10 +476,10 @@ callback_mode() ->
476476

477477
starting({call, From}, {open_writer, Filename}, State) ->
478478
leveled_log:save(State#state.log_options),
479-
leveled_log:log(cdb01, [Filename]),
479+
?STD_LOG(cdb01, [Filename]),
480480
{LastPosition, HashTree, LastKey} = open_active_file(Filename),
481481
{WriteOps, UpdStrategy} = set_writeops(State#state.sync_strategy),
482-
leveled_log:log(cdb13, [WriteOps]),
482+
?STD_LOG(cdb13, [WriteOps]),
483483
{ok, Handle} = file:open(Filename, WriteOps),
484484
State0 = State#state{
485485
handle = Handle,
@@ -493,7 +493,7 @@ starting({call, From}, {open_writer, Filename}, State) ->
493493
{next_state, writer, State0, [{reply, From, ok}, hibernate]};
494494
starting({call, From}, {open_reader, Filename}, State) ->
495495
leveled_log:save(State#state.log_options),
496-
leveled_log:log(cdb02, [Filename]),
496+
?STD_LOG(cdb02, [Filename]),
497497
{Handle, Index, LastKey} = open_for_readonly(Filename, false),
498498
State0 = State#state{
499499
handle = Handle,
@@ -504,7 +504,7 @@ starting({call, From}, {open_reader, Filename}, State) ->
504504
{next_state, reader, State0, [{reply, From, ok}, hibernate]};
505505
starting({call, From}, {open_reader, Filename, LastKey}, State) ->
506506
leveled_log:save(State#state.log_options),
507-
leveled_log:log(cdb02, [Filename]),
507+
?STD_LOG(cdb02, [Filename]),
508508
{Handle, Index, LastKey} = open_for_readonly(Filename, LastKey),
509509
State0 = State#state{
510510
handle = Handle,
@@ -706,7 +706,7 @@ rolling(
706706
ok = write_top_index_table(Handle, BasePos, IndexList),
707707
file:close(Handle),
708708
ok = rename_for_read(FN, NewName),
709-
leveled_log:log(cdb03, [NewName]),
709+
?STD_LOG(cdb03, [NewName]),
710710
ets:delete(State#state.hashtree),
711711
{NewHandle, Index, LastKey} =
712712
open_for_readonly(NewName, State#state.last_key),
@@ -720,7 +720,7 @@ rolling(
720720
true ->
721721
{next_state, delete_pending, State0, [{reply, From, ok}]};
722722
false ->
723-
leveled_log:log_timer(cdb18, [], SW),
723+
?TMR_LOG(cdb18, [], SW),
724724
{next_state, reader, State0, [{reply, From, ok}, hibernate]}
725725
end;
726726
rolling({call, From}, check_hashtable, _State) ->
@@ -819,7 +819,7 @@ reader(
819819
) when
820820
?IS_DEF(FN), ?IS_DEF(IO)
821821
->
822-
leveled_log:log(cdb05, [FN, reader, cdb_ccomplete]),
822+
?STD_LOG(cdb05, [FN, reader, cdb_ccomplete]),
823823
ok = file:close(IO),
824824
{stop_and_reply, normal, [{reply, From, {ok, FN}}], State#state{
825825
handle = undefined
@@ -870,7 +870,7 @@ delete_pending(
870870
) when
871871
?IS_DEF(FN), ?IS_DEF(IO)
872872
->
873-
leveled_log:log(cdb05, [FN, delete_pending, cdb_close]),
873+
?STD_LOG(cdb05, [FN, delete_pending, cdb_close]),
874874
close_pendingdelete(IO, FN, State#state.waste_path),
875875
{stop_and_reply, normal, [{reply, From, ok}]};
876876
delete_pending({call, From}, Event, State) ->
@@ -880,15 +880,15 @@ delete_pending(
880880
) when
881881
?IS_DEF(FN), ?IS_DEF(IO)
882882
->
883-
leveled_log:log(cdb04, [FN, State#state.delete_point]),
883+
?STD_LOG(cdb04, [FN, State#state.delete_point]),
884884
close_pendingdelete(IO, FN, State#state.waste_path),
885885
{stop, normal};
886886
delete_pending(
887887
cast, destroy, State = #state{handle = IO, filename = FN}
888888
) when
889889
?IS_DEF(FN), ?IS_DEF(IO)
890890
->
891-
leveled_log:log(cdb05, [FN, delete_pending, destroy]),
891+
?STD_LOG(cdb05, [FN, delete_pending, destroy]),
892892
close_pendingdelete(IO, FN, State#state.waste_path),
893893
{stop, normal};
894894
delete_pending(
@@ -906,7 +906,7 @@ delete_pending(
906906
),
907907
{keep_state_and_data, [?DELETE_TIMEOUT]};
908908
false ->
909-
leveled_log:log(cdb04, [FN, ManSQN]),
909+
?STD_LOG(cdb04, [FN, ManSQN]),
910910
close_pendingdelete(IO, FN, State#state.waste_path),
911911
{stop, normal}
912912
end.
@@ -1058,7 +1058,7 @@ close_pendingdelete(Handle, Filename, WasteFP) ->
10581058
false ->
10591059
% This may happen when there has been a destroy while files are
10601060
% still pending deletion
1061-
leveled_log:log(cdb21, [Filename])
1061+
?STD_LOG(cdb21, [Filename])
10621062
end.
10631063

10641064
-spec set_writeops(sync | riak_sync | none) ->
@@ -1101,7 +1101,7 @@ open_active_file(FileName) when is_list(FileName) ->
11011101
{?BASE_POSITION, 0} ->
11021102
ok;
11031103
_ ->
1104-
leveled_log:log(cdb06, [LastPosition, EndPosition])
1104+
?STD_LOG(cdb06, [LastPosition, EndPosition])
11051105
end,
11061106
{ok, _LastPosition} = file:position(Handle, LastPosition),
11071107
ok = file:truncate(Handle),
@@ -1280,7 +1280,7 @@ hashtable_calc(HashTree, StartPos) ->
12801280
Seq = lists:seq(0, 255),
12811281
SWC = os:timestamp(),
12821282
{IndexList, HashTreeBin} = write_hash_tables(Seq, HashTree, StartPos),
1283-
leveled_log:log_timer(cdb07, [], SWC),
1283+
?TMR_LOG(cdb07, [], SWC),
12841284
{IndexList, HashTreeBin}.
12851285

12861286
%%%%%%%%%%%%%%%%%%%%
@@ -1292,7 +1292,7 @@ determine_new_filename(Filename) ->
12921292

12931293
rename_for_read(Filename, NewName) ->
12941294
%% Rename file
1295-
leveled_log:log(cdb08, [Filename, NewName, filelib:is_file(NewName)]),
1295+
?STD_LOG(cdb08, [Filename, NewName, filelib:is_file(NewName)]),
12961296
file:rename(Filename, NewName).
12971297

12981298
-spec open_for_readonly(string(), term()) ->
@@ -1487,7 +1487,7 @@ scan_over_file(Handle, Position, FilterFun, Output, LastKey) ->
14871487
% Not interesting that we've nothing to read at base
14881488
ok;
14891489
_ ->
1490-
leveled_log:log(cdb09, [Position])
1490+
?STD_LOG(cdb09, [Position])
14911491
end,
14921492
% Bring file back to that position
14931493
{ok, Position} = file:position(Handle, {bof, Position}),
@@ -1590,7 +1590,7 @@ safe_read_next(Handle, Length, ReadType) ->
15901590
end
15911591
catch
15921592
error:ReadError ->
1593-
leveled_log:log(cdb20, [ReadError, Length]),
1593+
?STD_LOG(cdb20, [ReadError, Length]),
15941594
false
15951595
end.
15961596

@@ -1604,11 +1604,11 @@ crccheck(<<CRC:32/integer, Value/binary>>, KeyBin) when is_binary(KeyBin) ->
16041604
CRC ->
16051605
Value;
16061606
_ ->
1607-
leveled_log:log(cdb10, ["mismatch"]),
1607+
?STD_LOG(cdb10, ["mismatch"]),
16081608
false
16091609
end;
16101610
crccheck(_V, _KB) ->
1611-
leveled_log:log(cdb10, ["size"]),
1611+
?STD_LOG(cdb10, ["size"]),
16121612
false.
16131613

16141614
-spec calc_crc(binary(), binary()) -> integer().
@@ -1710,7 +1710,7 @@ search_hash_table(
17101710
end,
17111711
case KV of
17121712
missing ->
1713-
leveled_log:log(cdb15, [Hash]),
1713+
?STD_LOG(cdb15, [Hash]),
17141714
search_hash_table(
17151715
Handle,
17161716
{FirstHashPosition, Slot, CycleCount + 1, TotalSlots},
@@ -1765,7 +1765,7 @@ perform_write_hash_tables(Handle, HashTreeBin, StartPos) ->
17651765
ok = file:write(Handle, HashTreeBin),
17661766
{ok, EndPos} = file:position(Handle, cur),
17671767
ok = file:advise(Handle, StartPos, EndPos - StartPos, will_need),
1768-
leveled_log:log_timer(cdb12, [], SWW),
1768+
?TMR_LOG(cdb12, [], SWW),
17691769
ok.
17701770

17711771
%% Write the top most 255 doubleword entries. First word is the
@@ -1952,7 +1952,7 @@ write_hash_tables(
19521952
HT_BinList,
19531953
{T1, T2, T3}
19541954
) ->
1955-
leveled_log:log(cdb14, [T1, T2, T3]),
1955+
?STD_LOG(cdb14, [T1, T2, T3]),
19561956
IL = lists:reverse(IndexList),
19571957
{IL, list_to_binary(lists:reverse(HT_BinList))};
19581958
write_hash_tables(

src/leveled_codec.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -626,7 +626,7 @@ get_tagstrategy(Tag, Strategy) ->
626626
%% running in head_only mode - so don't warn
627627
retain;
628628
false ->
629-
leveled_log:log(ic012, [Tag, Strategy]),
629+
?STD_LOG(ic012, [Tag, Strategy]),
630630
retain
631631
end.
632632

0 commit comments

Comments
 (0)