@ -1,8 +1,8 @@
- module ( eRum ) .
- module ( eLog ) .
- include ( " rum Def.hrl" ) .
- include ( " rum Com.hrl" ) .
- include ( " lg Def.hrl" ) .
- include ( " lg Com.hrl" ) .
- compile ( inline ) .
- compile ( { inline_size , 150 } ) .
@ -62,7 +62,7 @@
- record ( trace_func_state_v1 , {
pid : : undefined | pid ( ) ,
level : : rum AtomLevel( ) ,
level : : lg AtomLevel( ) ,
count : : infinity | pos_integer ( ) ,
format_string : : string ( ) ,
timeout : : infinity | pos_integer ( ) ,
@ -70,15 +70,15 @@
} ) .
start ( ) - >
application : ensure_all_started ( eRum ) .
application : ensure_all_started ( eLog ) .
stop ( ) - >
application : stop ( eRum ) .
application : stop ( eLog ) .
- spec dispatchLog ( atom ( ) , rum AtomLevel( ) , pid ( ) , node ( ) , atom ( ) , atom ( ) , integer ( ) , list ( ) , string ( ) , list ( ) | none , pos_integer ( ) , safe | unsafe ) - > ok | { error , lager_not_running } | { error , { sink_not_configured , atom ( ) } } .
% % this is the same check that the parse transform bakes into the module at compile time see rum Transform ( lines 173 - 216 )
- spec dispatchLog ( atom ( ) , lg AtomLevel( ) , pid ( ) , node ( ) , atom ( ) , atom ( ) , integer ( ) , list ( ) , string ( ) , list ( ) | none , pos_integer ( ) , safe | unsafe ) - > ok | { error , lager_not_running } | { error , { sink_not_configured , atom ( ) } } .
% % this is the same check that the parse transform bakes into the module at compile time see lg Transform ( lines 173 - 216 )
dispatchLog ( Sink , Severity , Pid , Node , Module , Function , Line , Metadata , Format , Args , Size , Safety ) - >
case ? eRum Cfg : get ( Sink ) band Severity / = 0 of
case ? eLog Cfg : get ( Sink ) band Severity / = 0 of
true - >
doLogImpl ( Severity , Pid , Node , Module , Function , Line , Metadata , Format , Args , Severity , Size , Sink , Safety ) ;
_ - >
@ -86,25 +86,25 @@ dispatchLog(Sink, Severity, Pid, Node, Module, Function, Line, Metadata, Format,
end .
doLogImpl ( Severity , Pid , Node , Module , Function , Line , Metadata , Format , Args , Severity , Size , Sink , Safety ) - >
TraceFilters = rum Config: ptGet ( { Sink , trace } , [ ] ) ,
Destinations = ? IIF ( TraceFilters / = [ ] , rum Util: check_traces ( Metadata , Severity , TraceFilters , [ ] ) , [ ] ) ,
TraceFilters = lg Config: ptGet ( { Sink , trace } , [ ] ) ,
Destinations = ? IIF ( TraceFilters / = [ ] , lg Util: check_traces ( Metadata , Severity , TraceFilters , [ ] ) , [ ] ) ,
MsgStr = ? IIF ( Args / = [ ] andalso Args / = undefined , ? IIF ( Safety == safe , safeFormat ( Format , [ Args ] , [ { charsLimit , Size } ] ) , unsafeFormat ( Format , [ Args ] ) ) , Format ) ,
NowMs = rum Time: nowMs ( ) ,
NowStr = rum Util: msToBinStr ( NowMs ) ,
RumMsg = #rum Msg{ severity = Severity , pid = Pid , node = Node , module = Module , function = Function , line = Line , metadata = Metadata , datetime = NowStr , timestamp = NowMs , message = MsgStr , destinations = Destinations } ,
NowMs = lg Time: nowMs ( ) ,
NowStr = lg Util: msToBinStr ( NowMs ) ,
LgMsg = #lg Msg{ severity = Severity , pid = Pid , node = Node , module = Module , function = Function , line = Line , metadata = Metadata , datetime = NowStr , timestamp = NowMs , message = MsgStr , destinations = Destinations } ,
case rum Config: ptGet ( { Sink , async } , false ) of
case lg Config: ptGet ( { Sink , async } , false ) of
true - >
gen_emm : info_notify ( Sink , { mWriteLog , Rum Msg} ) ;
false - >
gen_emm : call_notify ( Sink , { mWriteLog , Rum Msg} )
gen_emm : info_notify ( Sink , { mWriteLog , Lg Msg} ) ;
_ - >
gen_emm : call_notify ( Sink , { mWriteLog , Lg Msg} )
end ,
case whereis ( ? Rum TrackSink) of
case whereis ( ? Lg TrackSink) of
undefined - >
ok ;
TraceSinkPid - >
gen_emm : info_notify ( TraceSinkPid , { mWriteLog , Rum Msg} )
gen_emm : info_notify ( TraceSinkPid , { mWriteLog , Lg Msg} )
end .
% % @ doc Get lager metadata for current process
@ -135,12 +135,12 @@ setMd(_) ->
% % @ doc Set the loglevel for a particular backend .
setLogLevel ( Handler , Level ) when is_atom ( Level ) - >
setLogLevel ( ? Rum DefSink, Handler , undefined , Level ) .
setLogLevel ( ? Lg DefSink, Handler , undefined , Level ) .
% % @ doc Set the loglevel for a particular backend that has multiple identifiers
% % ( eg . the file backend ) .
setLogLevel ( Handler , Ident , Level ) when is_atom ( Level ) - >
setLogLevel ( ? Rum DefSink, Handler , Ident , Level ) .
setLogLevel ( ? Lg DefSink, Handler , Ident , Level ) .
% % @ doc Set the loglevel for a particular sink ' s backend that potentially has
% % multiple identifiers . ( Use ` undefined ' if it doesn' t have any . )
@ -157,14 +157,14 @@ setLogLevel(Sink, Handler, Ident, Level) when is_atom(Level) ->
% % @ doc Get the loglevel for a particular backend on the default sink . In the case that the backend has multiple identifiers , the lowest is returned .
getLogLevel ( Handler ) - >
getLogLevel ( ? Rum DefSink, Handler ) .
getLogLevel ( ? Lg DefSink, Handler ) .
% % @ doc Get the loglevel for a particular sink ' s backend . In the case that the backend
% % has multiple identifiers , the lowest is returned .
getLogLevel ( Sink , Handler ) - >
case gen_emm : call ( Sink , Handler , mGetLogLevel , infinity ) of
Mask when is_integer ( Mask ) - >
case rum Util: maskToLevels ( Mask ) of
case lg Util: maskToLevels ( Mask ) of
[ ] - > none ;
Levels - > hd ( Levels )
end ;
@ -176,7 +176,7 @@ getLogLevels(Sink) ->
% % @ doc Set the loghwm for the default sink .
setLogHwm ( Handler , Hwm ) when is_integer ( Hwm ) - >
setLogHwm ( ? Rum DefSink, Handler , Hwm ) .
setLogHwm ( ? Lg DefSink, Handler , Hwm ) .
% % @ doc Set the loghwm for a particular backend .
setLogHwm ( Sink , Handler , Hwm ) when is_integer ( Hwm ) - >
@ -192,17 +192,17 @@ upLogLevelCfg(error_logger) ->
% % utility that error_logger_lager_h attaches to
true ;
upLogLevelCfg ( Sink ) - >
Traces = rum Config: ptGet ( { Sink , trace } , [ ] ) ,
Traces = lg Config: ptGet ( { Sink , trace } , [ ] ) ,
AllLogLevel = allLogLevel ( getLogLevels ( Sink ) , 0 ) ,
case Traces / = [ ] of
true - >
ets : insert ( ? eRum Ets , { Sink , 16#ff } ) ,
AllSinks = ets : tab2list ( ? eRum Ets ) ,
rum KvsToBeam: load ( ? eRum Cfg , AllSinks ) ;
ets : insert ( ? eLog Ets , { Sink , 16#ff } ) ,
AllSinks = ets : tab2list ( ? eLog Ets ) ,
lg KvsToBeam: load ( ? eLog Cfg , AllSinks ) ;
_ - >
ets : insert ( ? eRum Ets , { Sink , AllLogLevel } ) ,
AllSinks = ets : tab2list ( ? eRum Ets ) ,
rum KvsToBeam: load ( ? eRum Cfg , AllSinks )
ets : insert ( ? eLog Ets , { Sink , AllLogLevel } ) ,
AllSinks = ets : tab2list ( ? eLog Ets ) ,
lg KvsToBeam: load ( ? eLog Cfg , AllSinks )
end .
allLogLevel ( [ ] , Acc ) - >
@ -211,7 +211,7 @@ allLogLevel([OneLv | Levels], Acc) ->
allLogLevel ( Levels , OneLv bor Acc ) .
rotateSink ( Sink ) - >
Handlers = rum Config: ptGet ( handlers , [ ] ) ,
Handlers = lg Config: ptGet ( handlers , [ ] ) ,
RotateHandlers = lists : filtermap (
fun ( { Handler , _ , S } ) when S == Sink - > { true , { Handler , Sink } } ;
( _ ) - > false
@ -221,7 +221,7 @@ rotateSink(Sink) ->
rotateAll ( ) - >
rotateHandlers ( lists : map ( fun ( { H , _ , S } ) - > { H , S } end ,
rum Config: ptGet ( handlers , [ ] ) ) ) .
lg Config: ptGet ( handlers , [ ] ) ) ) .
rotateHandlers ( Handlers ) - >
@ -229,14 +229,14 @@ rotateHandlers(Handlers) ->
rotateHandler ( Handler ) - >
Handlers = rum Config: ptGet ( handlers , [ ] ) ,
Handlers = lg Config: ptGet ( handlers , [ ] ) ,
case lists : keyfind ( Handler , 1 , Handlers ) of
{ Handler , _ , Sink } - > rotateHandler ( Handler , Sink ) ;
false - > ok
end .
rotateHandler ( Handler , Sink ) - >
gen_emm : call ( Sink , Handler , mRotate , ? Rum RotateTimeout) .
gen_emm : call ( Sink , Handler , mRotate , ? Lg RotateTimeout) .
% % @ doc Print stacktrace in human readable form
parseStack ( Stacktrace ) - >
@ -259,7 +259,7 @@ parseStack(Class, Reason, Stacktrace) ->
trace ( BkdMod , Filter ) - >
trace ( BkdMod , Filter , debug ) .
trace ( { rum BkdFile, File } , Filter , Level ) - >
trace ( { lg BkdFile, File } , Filter , Level ) - >
trace_file ( File , Filter , Level ) ;
trace ( Backend , Filter , Level ) - >
case validateTraceFilters ( Filter , Level , Backend ) of
@ -280,13 +280,13 @@ trace_file(File, Filter, Options) when is_list(Options) ->
trace_file ( File , Filter , debug , Options ) .
trace_file ( File , Filter , Level , Options ) - >
FileName = rum Util: parsePath ( File ) ,
case validateTraceFilters ( Filter , Level , { rum BkdFile, FileName } ) of
FileName = lg Util: parsePath ( File ) ,
case validateTraceFilters ( Filter , Level , { lg BkdFile, FileName } ) of
{ Sink , { ok , Trace } } - >
Handlers = rum Config: ptGet ( handlers , [ ] ) ,
Handlers = lg Config: ptGet ( handlers , [ ] ) ,
% % check if this file backend is already installed
Res =
case rum Util: find_file ( FileName , Handlers ) of
case lg Util: find_file ( FileName , Handlers ) of
false - >
% % install the handler
LogFileConfig =
@ -296,8 +296,8 @@ trace_file(File, Filter, Level, Options) ->
{ file , FileName } ) ,
{ level , none } ) ,
HandlerInfo =
eRum _app : startHandler ( Sink , { rum BkdFile, FileName } , LogFileConfig ) ,
rum Config: ptSet ( handlers , [ HandlerInfo | Handlers ] ) ,
eLog _app : startHandler ( Sink , { lg BkdFile, FileName } , LogFileConfig ) ,
lg Config: ptSet ( handlers , [ HandlerInfo | Handlers ] ) ,
{ ok , installed } ;
{ _ Watcher , _ Handler , Sink } - >
{ ok , exists } ;
@ -307,7 +307,7 @@ trace_file(File, Filter, Level, Options) ->
case Res of
{ ok , _ } - >
add_trace_to_loglevel_config ( Trace , Sink ) ,
{ ok , { { rum BkdFile, FileName } , Filter , Level } } ;
{ ok , { { lg BkdFile, FileName } , Filter , Level } } ;
{ error , _ } = E - >
E
end ;
@ -319,7 +319,7 @@ trace_console(Filter) ->
trace_console ( Filter , debug ) .
trace_console ( Filter , Level ) - >
trace ( rum BkdConsole, Filter , Level ) .
trace ( lg BkdConsole, Filter , Level ) .
stop_trace ( Backend , Filter , Level ) - >
case validateTraceFilters ( Filter , Level , Backend ) of
@ -334,9 +334,9 @@ stop_trace({Backend, Filter, Level}) ->
validateTraceFilters ( Filters , Level , Backend ) - >
Sink = proplists : get_value ( sink , Filters , ? Rum DefSink) ,
Sink = proplists : get_value ( sink , Filters , ? Lg DefSink) ,
{ Sink ,
rum Util: validate_trace ( {
lg Util: validate_trace ( {
proplists : delete ( sink , Filters ) ,
Level ,
Backend
@ -353,12 +353,12 @@ validateTraceFilters(Filters, Level, Backend) ->
% % and when they come back from validation , they ' re
% % ` { Filter , Level , Backend } '
stop_trace_int ( { _ Filter , _ Level , Backend } = Trace , Sink ) - >
Traces = rum Config: ptGet ( { Sink , trace } , [ ] ) ,
Traces = lg Config: ptGet ( { Sink , trace } , [ ] ) ,
NewTraces = lists : delete ( Trace , Traces ) ,
_ = rum Util: trace_filter ( [ element ( 1 , T ) | | T < - NewTraces ] ) ,
_ = lg Util: trace_filter ( [ element ( 1 , T ) | | T < - NewTraces ] ) ,
% MinLevel = minimum_loglevel ( get_loglevels ( ) ++ get_trace_levels ( NewTraces ) ) ,
rum Config: ptSet ( { Sink , trace } , NewTraces ) ,
eRum : upLogLevelCfg ( Sink ) ,
lg Config: ptSet ( { Sink , trace } , NewTraces ) ,
eLog : upLogLevelCfg ( Sink ) ,
case getLogLevel ( Sink , Backend ) of
none - >
@ -366,9 +366,9 @@ stop_trace_int({_Filter, _Level, Backend} = Trace, Sink) ->
case lists : keyfind ( Backend , 3 , NewTraces ) of
false - >
gen_emm : delEpm ( Sink , Backend , [ ] ) ,
rum Config: ptSet ( handlers ,
lg Config: ptSet ( handlers ,
lists : keydelete ( Backend , 1 ,
rum Config: ptGet ( handlers , [ ] ) ) ) ;
lg Config: ptGet ( handlers , [ ] ) ) ) ;
_ - >
ok
end ;
@ -378,11 +378,11 @@ stop_trace_int({_Filter, _Level, Backend} = Trace, Sink) ->
ok .
% % @ doc installs a lager trace handler into the target process ( using sys : install ) at the specified level .
- spec install_trace ( pid ( ) , rum AtomLevel( ) ) - > ok .
- spec install_trace ( pid ( ) , lg AtomLevel( ) ) - > ok .
install_trace ( Pid , Level ) - >
install_trace ( Pid , Level , [ ] ) .
- spec install_trace ( pid ( ) , rum AtomLevel( ) , [ { count , infinity | pos_integer ( ) } | { format_string , string ( ) } | { timeout , timeout ( ) } ] ) - > ok .
- spec install_trace ( pid ( ) , lg AtomLevel( ) , [ { count , infinity | pos_integer ( ) } | { format_string , string ( ) } | { timeout , timeout ( ) } ] ) - > ok .
install_trace ( Pid , Level , Options ) - >
sys : install ( Pid , { fun ? MODULE : trace_func / 3 , trace_state ( Pid , Level , Options ) } ) .
@ -397,13 +397,13 @@ list_all_sinks() ->
sets : add_element ( Sink , Set )
end ,
sets : new ( ) ,
rum Config: ptGet ( handlers , [ ] ) ) ) .
lg Config: ptGet ( handlers , [ ] ) ) ) .
clear_traces_by_sink ( Sinks ) - >
lists : foreach (
fun ( S ) - >
rum Config: ptSet ( { S , trace } , [ ] ) ,
eRum : upLogLevelCfg ( S )
lg Config: ptSet ( { S , trace } , [ ] ) ,
eLog : upLogLevelCfg ( S )
end ,
Sinks ) .
@ -415,10 +415,10 @@ clear_trace_by_destination(ID) ->
clear_all_traces ( ) - >
Handlers = rum Config: ptGet ( handlers , [ ] ) ,
Handlers = lg Config: ptGet ( handlers , [ ] ) ,
clear_traces_by_sink ( list_all_sinks ( ) ) ,
_ = rum Util: trace_filter ( none ) ,
rum Config: ptSet ( handlers ,
_ = lg Util: trace_filter ( none ) ,
lg Config: ptSet ( handlers ,
lists : filter (
fun ( { Handler , _ Watcher , Sink } ) - >
case getLogLevel ( Sink , Handler ) of
@ -432,14 +432,14 @@ clear_all_traces() ->
find_traces ( Sinks ) - >
lists : foldl ( fun ( S , Acc ) - >
Traces = rum Config: ptGet ( { S , trace } , [ ] ) ,
Traces = lg Config: ptGet ( { S , trace } , [ ] ) ,
Acc ++ lists : map ( fun ( T ) - > { S , T } end , Traces )
end ,
[ ] ,
Sinks ) .
status ( ) - >
Handlers = rum Config: ptGet ( handlers , [ ] ) ,
Handlers = lg Config: ptGet ( handlers , [ ] ) ,
Sinks = lists : sort ( list_all_sinks ( ) ) ,
Traces = find_traces ( Sinks ) ,
TraceCount = case length ( Traces ) of
@ -456,7 +456,7 @@ status() ->
" Active Traces: \n " ,
[ begin
LevelName =
case rum Util: maskToLevels ( Level ) of
case lg Util: maskToLevels ( Level ) of
[ ] - > none ;
Levels - > hd ( Levels )
end ,
@ -466,7 +466,7 @@ status() ->
end | | { Sink , { Filter , Level , Destination } } < - Traces ] ,
[
" Tracing Reductions: \n " ,
case ? Rum DefTracer: info ( 'query' ) of
case ? Lg DefTracer: info ( 'query' ) of
{ null , false } - > " " ;
Query - > io_lib : format ( " ~p ~n " , [ Query ] )
end
@ -475,7 +475,7 @@ status() ->
" Tracing Statistics: \n " ,
[ begin
[ " " , atom_to_list ( Table ) , " : " ,
integer_to_list ( ? Rum DefTracer: info ( Table ) div TraceCount ) ,
integer_to_list ( ? Lg DefTracer: info ( Table ) div TraceCount ) ,
" \n " ]
end | | Table < - [ input , output , filter ] ]
] ] ,
@ -483,9 +483,9 @@ status() ->
get_sink_handler_status ( Sink , Handler , Level ) - >
case Handler of
{ rum BkdFile, File } - >
{ lg BkdFile, File } - >
io_lib : format ( " File ~ ts ( ~s ) at level ~p \n " , [ File , Sink , Level ] ) ;
rum BkdConsole - >
lg BkdConsole - >
io_lib : format ( " Console ( ~s ) at level ~p \n " , [ Sink , Level ] ) ;
_ - >
[ ]
@ -493,13 +493,13 @@ get_sink_handler_status(Sink, Handler, Level) ->
% % @ private
add_trace_to_loglevel_config ( Trace , Sink ) - >
Traces = rum Config: ptGet ( { Sink , trace } , [ ] ) ,
Traces = lg Config: ptGet ( { Sink , trace } , [ ] ) ,
case lists : member ( Trace , Traces ) of
false - >
NewTraces = [ Trace | Traces ] ,
_ = rum Util: trace_filter ( [ element ( 1 , T ) | | T < - NewTraces ] ) ,
rum Config: ptSet ( { Sink , trace } , [ Trace | Traces ] ) ,
eRum : upLogLevelCfg ( Sink ) ;
_ = lg Util: trace_filter ( [ element ( 1 , T ) | | T < - NewTraces ] ) ,
lg Config: ptSet ( { Sink , trace } , [ Trace | Traces ] ) ,
eLog : upLogLevelCfg ( Sink ) ;
_ - >
ok
end .
@ -535,7 +535,7 @@ safeFormat(Fmt, Args, Limit) ->
% % @ private
trace_func ( #trace_func_state_v1 { pid = Pid , level = Level , format_string = Fmt } = FuncState , Event , ProcState ) - >
_ = eRum : log ( Level , Pid , Fmt , [ Event , ProcState ] ) ,
_ = eLog : log ( Level , Pid , Fmt , [ Event , ProcState ] ) ,
check_timeout ( decrement_count ( FuncState ) ) .
% % @ private