Ver a proveniência

ft: 代码整理

master
SisMaker há 3 anos
ascendente
cometimento
c215cdb623
30 ficheiros alterados com 611 adições e 684 eliminações
  1. +15
    -15
      README.md
  2. +11
    -11
      eLog.sample.config
  3. +67
    -0
      include/eLog.hrl
  4. +0
    -68
      include/eRum.hrl
  5. +8
    -7
      include/lgCom.hrl
  6. +54
    -54
      include/lgDef.hrl
  7. +0
    -0
      include/lgTime.hrl
  8. +3
    -6
      rebar.config
  9. +25
    -25
      src/backend/lgBkdConsole.erl
  10. +69
    -69
      src/backend/lgBkdFile.erl
  11. +5
    -5
      src/backend/lgBkdThrottle.erl
  12. +12
    -12
      src/crashLog/lgCrashLog.erl
  13. +2
    -2
      src/eLog.app.src
  14. +73
    -73
      src/eLog.erl
  15. +30
    -30
      src/eLog_app.erl
  16. +23
    -23
      src/eLog_sup.erl
  17. +34
    -34
      src/errLogger/lgErrLoggerH.erl
  18. +77
    -77
      src/formatter/lgFmtTer.erl
  19. +3
    -3
      src/mgrKiller/lgMgrKiller.erl
  20. +1
    -1
      src/rotator/lgRotatorExm.erl
  21. +3
    -3
      src/rotator/lgRotatorIns.erl
  22. +0
    -57
      src/test.E
  23. +0
    -13
      src/test.erl1
  24. +20
    -0
      src/utils/lgConfig.erl
  25. +1
    -1
      src/utils/lgKvsToBeam.erl
  26. +2
    -2
      src/utils/lgTime.erl
  27. +60
    -60
      src/utils/lgUtil.erl
  28. +0
    -20
      src/utils/rumConfig.erl
  29. +9
    -9
      src/watcher/lgHWatcherSrv.erl
  30. +4
    -4
      src/watcher/lgWatcherSup.erl

+ 15
- 15
README.md Ver ficheiro

@ -1,6 +1,6 @@
概述
--------
eRum is a Erlang logger. 基于lager3.9.0 rewrite
eLog is a Erlang logger. 基于lager3.9.0 rewrite
TODO
--------
@ -26,24 +26,24 @@ trace相关代码整理
使用
-----
在应用程序中使用eRum,需要将其定义为rebar dep,或者使用其他方法将其包含在Erlang的dep路径中。然后添加下面的编译选项:
在应用程序中使用eLog,需要将其定义为rebar dep,或者使用其他方法将其包含在Erlang的dep路径中。然后添加下面的编译选项:
在记录任何消息之前,您需要启动eRum应用程序。eRum模块的start函数负责启动 加载并启动eRum需要的任何依赖项
在记录任何消息之前,您需要启动eLog应用程序。eLog模块的start函数负责启动 加载并启动eLog需要的任何依赖项
```erlang
eRum:start().
eLog:start().
```
配置选项
-------------
要配置eRum的后端,你需要使用一个应用程序变量(可能在app.config中):
要配置eLog的后端,你需要使用一个应用程序变量(可能在app.config中):
每个后端可用的配置选项都列在它们的模块文档中。
接受器(Sinks)
-----
eRum传统上支持名为`eRumEmm`的单一接收器(sink)(实现为`gen_emm`管理器),所有后端都连接到该接收器。 eRum现在支持额外的接收器(sink);每个接收器(sink)可以有不同的 sync/async
eLog传统上支持名为`eLogEmm`的单一接收器(sink)(实现为`gen_emm`管理器),所有后端都连接到该接收器。 eLog现在支持额外的接收器(sink);每个接收器(sink)可以有不同的 sync/async
消息阈值和不同的后端。
### 接收器的配置
@ -75,7 +75,7 @@ an `extraSinks` tuple with backends (aka "handlers") and optionally `asyncThresh
below). If async values are not configured, no overload protection will be applied on that sink.
```erlang
[{eRum, [
[{eLog, [
{logRoot, "/tmp"},
%% Default handlers for lager/lager_event
{handlers, [
@ -95,16 +95,16 @@ below). If async values are not configured, no overload protection will be appli
自定义格式
-----------------
All loggers have a default formatting that can be overriden. A formatTer is any module that
All loggers have a default formatting that can be overriden. A fmtTer is any module that
exports `format(#lager_log_message{},Config#any())`. It is specified as part of the configuration for the backend:
```erlang
{eRum, [
{eLog, [
{handlers, [
{lager_console_backend, [{level, info}, {formatTer, lager_default_formatter},
{formatCfg, [time, " [",severity, "] ", message, "\n"]}]},
{lager_file_backend, [{file, "error.log"}, {level, error}, {formatTer, lager_default_formatter},
{formatCfg, [date, " ", time, " [", severity, "] ",pid, " ", message, "\n"]}]},
{lager_console_backend, [{level, info}, {fmtTer, lager_default_formatter},
{fmtCfg, [time, " [",severity, "] ", message, "\n"]}]},
{lager_file_backend, [{file, "error.log"}, {level, error}, {fmtTer, lager_default_formatter},
{fmtCfg, [date, " ", time, " [", severity, "] ",pid, " ", message, "\n"]}]},
{lager_file_backend, [{file, "console.log"}, {level, info}]}
]}
]}.
@ -407,8 +407,8 @@ If you don't like the default colors, they are also configurable; see the `.app.
The output will be colored from the first occurrence of the atom color in the formatting configuration. For example:
```erlang
{lager_console_backend, [{level, info}, {formatTer, lager_default_formatter},
{formatCfg, [time, color, " [", severity, "] ", message, "\e[0m\r\n"]}]]}
{lager_console_backend, [{level, info}, {fmtTer, lager_default_formatter},
{fmtCfg, [time, color, " [", severity, "] ", message, "\e[0m\r\n"]}]]}
```
This will make the entire log message, except time, colored. The escape sequence before the line break is needed in

eRum.sample.config → eLog.sample.config Ver ficheiro

@ -1,5 +1,5 @@
[
{eRum, [
{eLog, [
%% ******************************************** 颜色打印相关 *****************************************************
%% 是否开启颜色
{colored, true},
@ -16,25 +16,25 @@
]},
%%*********************************************** handler与接收器(sink) and traces ******************************
%% 消息处理模块可以存在多个,[{SinkModule, [rumConsoleOpt() | rumFileOpt()]}]=Handler() 消息处理模块可以存在多个
%% 消息处理模块可以存在多个,[{SinkModule, [lgConsoleOpt() | lgFileOpt()]}]=Handler() 消息处理模块可以存在多个
%% eg: {handlers, [
%% {rumBkdFile, [{id, console}, {file, "console.log"}, {level, info}]},
%% {rumBkdFile, [{id, error}, {file, "error.log"}, {level, error}]},
%% {rumBkdConsole, [{level, info}]}
%% {lgBkdFile, [{id, console}, {file, "console.log"}, {level, info}]},
%% {lgBkdFile, [{id, error}, {file, "error.log"}, {level, error}]},
%% {lgBkdConsole, [{level, info}]}
%% ]}
{handlers, []},
%% 额外的接收器列表 [{SinkName, [{handlers, Handler()}|{asyncThreshold, 500}|{asyncThrWindow, 50}|{killerHwm, 1000}|{killerReTime, 5000}]}]
%% eg: {extraSinks, [
%% {auditEvent,[{handlers, [{rumBkdFile, [{file, "audit.log"}, {level, info}]}]}, {asyncThreshold, 500}, {asyncThrWindow, 50}]}
%% {auditEvent,[{handlers, [{lgBkdFile, [{file, "audit.log"}, {level, info}]}]}, {asyncThreshold, 500}, {asyncThrWindow, 50}]}
%% ]}}
{extraSinks, []},
%% traces列表 [{handler, [Handler()]}]
%%eg: {traces, [
%% handler, filter, message level (defaults to debug if not given)
%% {rumBkdConsole, [{module, foo}], info},
%% {{rumBkdFile, "trace.log"}, [{request, '>', 120}], error},
%% {{rumBkdFile, "event.log"}, [{module, bar}]} %% implied debug level here
%% {lgBkdConsole, [{module, foo}], info},
%% {{lgBkdFile, "trace.log"}, [{request, '>', 120}], error},
%% {{lgBkdFile, "event.log"}, [{module, bar}]} %% implied debug level here
%% ]}
{traces, []},
@ -54,7 +54,7 @@
%% ******************************************** format相关 ******************************************************
%% 元数据名单列表
{metadataWhitelist, []},
{mdWhitelist, []},
%% ********************************************** 日志文件配置相关 ************************************************
%% 可选的日志路径, 默认情况下是当前路径
@ -72,7 +72,7 @@
%% 要保留的已轮转崩溃日志的数量,0表示仅保留当前的一个-默认值为0
{crashLogCount, 0},
%% 崩溃日志旋转器模块-默认为lager_rotator_default
{crashLogRotator, rumRotatorIns},
{crashLogRotator, lgRotatorIns},
%% ********************************************** error_logger相关 **********************************************
%% 是否将error_logger消息重定向到默认的lager_event接收器-默认为true

+ 67
- 0
include/eLog.hrl Ver ficheiro

@ -0,0 +1,67 @@
-include("lgCom.hrl").
%% eLogCfg模块初始化了 使eLog的App启动后请调用一次
-define(eLogInit(), ?eLogInit(?LgDefSink)).
-define(eLogInit(Sink),
case ets:info(?eLogEts) of
undefined ->
ets:new(?eLogEts, [named_table]),
ets:insert(?eLogEts, {Sink, ?none}),
lgKvsToBeam:load(?eLogCfg, [{Sink, ?none}]);
_ ->
ignore
end).
%%
%% Level, Pid, Node, Module, Function, Line, Other
-define(lgLog(Severity, Format, Args, Safety),
?lgLog(?LgDefSink, Severity, self(), node(), ?MODULE, ?FUNCTION_NAME, ?LINE, eLog:getMd(), Format, Args, ?LgDefTruncation, Safety)).
-define(lgLog(Severity, Metadata, Format, Args, Safety),
?lgLog(?LgDefSink, Severity, self(), node(), ?MODULE, ?FUNCTION_NAME, ?LINE, Metadata ++ eLog:getMd(), Format, Args, ?LgDefTruncation, Safety)).
-define(lgLog(Sink, Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Size, Safety),
case ?eLogCfg:get(Sink) band Severity of
0 ->
ok;
_ ->
eLog:doLogImpl(Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Severity, Size, Sink, Safety)
end).
-define(lgNone(Format), ?lgLog(?none, Format, undefined, safe)).
-define(lgNone(Format, Args), ?lgLog(?none, Format, Args, safe)).
-define(lgNone(Metadata, Format, Args), ?lgLog(?none, Metadata, Format, Args, safe)).
-define(lgDebug(Format), ?lgLog(?debug, Format, undefined, safe)).
-define(lgDebug(Format, Args), ?lgLog(?debug, Format, Args, safe)).
-define(lgDebug(Metadata, Format, Args), ?lgLog(?debug, Metadata, Format, Args, safe)).
-define(lgInfo(Format), ?lgLog(?info, Format, undefined, safe)).
-define(lgInfo(Format, Args), ?lgLog(?info, Format, Args, safe)).
-define(lgInfo(Metadata, Format, Args), ?lgLog(?info, Metadata, Format, Args, safe)).
-define(lgNotice(Format), ?lgLog(?notice, Format, undefined, safe)).
-define(lgNotice(Format, Args), ?lgLog(?notice, Format, Args, safe)).
-define(lgNotice(Metadata, Format, Args), ?lgLog(?notice, Metadata, Format, Args, safe)).
-define(lgWarning(Format), ?lgLog(?warning, Format, undefined, safe)).
-define(lgWarning(Format, Args), ?lgLog(?warning, Format, Args, safe)).
-define(lgWarning(Metadata, Format, Args), ?lgLog(?warning, Metadata, Format, Args, safe)).
-define(lgError(Format), ?lgLog(?error, Format, undefined, safe)).
-define(lgError(Format, Args), ?lgLog(?error, Format, Args, safe)).
-define(lgError(Metadata, Format, Args), ?lgLog(?error, Metadata, Format, Args, safe)).
-define(lgCritical(Format), ?lgLog(?critical, Format, undefined, safe)).
-define(lgCritical(Format, Args), ?lgLog(?critical, Format, Args, safe)).
-define(lgCritical(Metadata, Format, Args), ?lgLog(?critical, Metadata, Format, Args, safe)).
-define(lgAlert(Format), ?lgLog(?alert, Format, undefined, safe)).
-define(lgAlert(Format, Args), ?lgLog(?alert, Format, Args, safe)).
-define(lgAlert(Metadata, Format, Args), ?lgLog(?alert, Metadata, Format, Args, safe)).
-define(lgEmergency(Format), ?lgLog(?emergency, Format, undefined, safe)).
-define(lgEmergency(Format, Args), ?lgLog(?emergency, Format, Args, safe)).
-define(lgEmergency(Metadata, Format, Args), ?lgLog(?emergency, Metadata, Format, Args, safe)).

+ 0
- 68
include/eRum.hrl Ver ficheiro

@ -1,68 +0,0 @@
-include("rumCom.hrl").
%% eRumCfg模块初始化了 使eRum的App启动后请调用一次
-define(eRumInit(), ?eRumInit(?RumDefSink)).
-define(eRumInit(Sink),
case ets:info(?eRumEts) of
undefined ->
ets:new(?eRumEts, [named_table]),
ets:insert(?eRumEts, {Sink, ?none}),
rumKvsToBeam:load(?eRumCfg, [{Sink, ?none}]);
_ ->
ignore
end).
%%
%% Level, Pid, Node, Module, Function, Line, Other
-define(rumLog(Severity, Format, Args, Safety),
?rumLog(?RumDefSink, Severity, self(), node(), ?MODULE, ?FUNCTION_NAME, ?LINE, eRum:getMd(), Format, Args, ?RumDefTruncation, Safety)).
-define(rumLog(Severity, Metadata, Format, Args, Safety),
?rumLog(?RumDefSink, Severity, self(), node(), ?MODULE, ?FUNCTION_NAME, ?LINE, Metadata ++ eRum:getMd(), Format, Args, ?RumDefTruncation, Safety)).
-define(rumLog(Sink, Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Size, Safety),
case ?eRumCfg:get(Sink) band Severity /= 0 of
true ->
eRum:doLogImpl(Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Severity, Size, Sink, Safety);
_ ->
ok
end).
%%eRum:dispatch_log(Sink, Severity, Pid, Node, Module, Function, File, Line, Metadata, Format, Args, Size, Safety)).
-define(rumNone(Format), ?rumLog(?none, Format, undefined, safe)).
-define(rumNone(Format, Args), ?rumLog(?none, Format, Args, safe)).
-define(rumNone(Metadata, Format, Args), ?rumLog(?none, Metadata, Format, Args, safe)).
-define(rumDebug(Format), ?rumLog(?debug, Format, undefined, safe)).
-define(rumDebug(Format, Args), ?rumLog(?debug, Format, Args, safe)).
-define(rumDebug(Metadata, Format, Args), ?rumLog(?debug, Metadata, Format, Args, safe)).
-define(rumInfo(Format), ?rumLog(?info, Format, undefined, safe)).
-define(rumInfo(Format, Args), ?rumLog(?info, Format, Args, safe)).
-define(rumInfo(Metadata, Format, Args), ?rumLog(?info, Metadata, Format, Args, safe)).
-define(rumNotice(Format), ?rumLog(?notice, Format, undefined, safe)).
-define(rumNotice(Format, Args), ?rumLog(?notice, Format, Args, safe)).
-define(rumNotice(Metadata, Format, Args), ?rumLog(?notice, Metadata, Format, Args, safe)).
-define(rumWarning(Format), ?rumLog(?warning, Format, undefined, safe)).
-define(rumWarning(Format, Args), ?rumLog(?warning, Format, Args, safe)).
-define(rumWarning(Metadata, Format, Args), ?rumLog(?warning, Metadata, Format, Args, safe)).
-define(rumError(Format), ?rumLog(?error, Format, undefined, safe)).
-define(rumError(Format, Args), ?rumLog(?error, Format, Args, safe)).
-define(rumError(Metadata, Format, Args), ?rumLog(?error, Metadata, Format, Args, safe)).
-define(rumCritical(Format), ?rumLog(?critical, Format, undefined, safe)).
-define(rumCritical(Format, Args), ?rumLog(?critical, Format, Args, safe)).
-define(rumCritical(Metadata, Format, Args), ?rumLog(?critical, Metadata, Format, Args, safe)).
-define(rumAlert(Format), ?rumLog(?alert, Format, undefined, safe)).
-define(rumAlert(Format, Args), ?rumLog(?alert, Format, Args, safe)).
-define(rumAlert(Metadata, Format, Args), ?rumLog(?alert, Metadata, Format, Args, safe)).
-define(rumEmergency(Format), ?rumLog(?emergency, Format, undefined, safe)).
-define(rumEmergency(Format, Args), ?rumLog(?emergency, Format, Args, safe)).
-define(rumEmergency(Metadata, Format, Args), ?rumLog(?emergency, Metadata, Format, Args, safe)).

include/rumCom.hrl → include/lgCom.hrl Ver ficheiro

@ -1,13 +1,13 @@
-ifndef(__RumCom__).
-define(__RumCom__, 1).
-ifndef(__lgCom__).
-define(__lgCom__, 1).
%%
-define(eRumCfg, eRumCfg).
-define(eRumEts, eRumEts).
-define(eRumPtTl, eRumPtTl).
-define(eLogCfg, eLogCfg).
-define(eLogEts, eLogEts).
-define(eLogPtTl, eLogPtTl).
-define(RumDefSink, rumEvent).
-define(RumDefTruncation, 4096).
-define(LgDefSink, lgEvent).
-define(LgDefTruncation, 4096).
%%
-define(debug, 128).
@ -19,4 +19,5 @@
-define(alert, 2).
-define(emergency, 1).
-define(none, 0).
-endif.

include/rumDef.hrl → include/lgDef.hrl Ver ficheiro

@ -1,9 +1,9 @@
-include("rumCom.hrl").
-include("lgCom.hrl").
%%
-define(RumAppName, eRum).
-define(LgAppName, eLog).
%%
-define(IIF(Cond, Ret1, Ret2), (case Cond of true -> Ret1; _ -> Ret2 end)).
-define(IIF(Cond, Then, That), (case Cond of true -> Then; _ -> That end)).
%%
-define(ERR(Format), error_logger:error_msg(Format)).
@ -12,29 +12,29 @@
-define(Print(Args), io:format("IMY************~p~n", [Args])).
%% key
-define(PdMdKey, pdRumMd).
-define(RumTrackSink, '__trace_sink').
-define(PdMdKey, pdLgMd).
-define(LgTrackSink, '_trace_sink').
%%
-define(RumRotateTimeout, 100000).
-define(LgRotateTimeout, 100000).
%%
-define(RumDefTracer, rumDefTracer).
-define(RumErrLogSink, errLoggerEvent).
-define(LgDefTracer, lgDefTracer).
-define(LgErrLogSink, errLoggerEvent).
%% rumBkdConsole的选项
-type rumConsoleOpt() ::
%% lgBkdConsole的选项
-type lgConsoleOpt() ::
{id, atom() | {atom(), atom()}} |
{use_stderr, boolean()} |
{group_leader, false | pid() | atom()} |
{formatTer, atom()} |
{formatCfg, list()}.
{fmtTer, atom()} |
{fmtCfg, list()}.
%% rumBkdFile的选项
-type rumFileOpt() ::
%% lgBkdFile的选项
-type lgFileOpt() ::
{id, atom()} |
{file, binary()} |
{level, rumAtomLevel() | atom()} |
{level, lgAtomLevel() | atom()} |
{size, non_neg_integer()} |
{date, string()} |
{count, non_neg_integer()} |
@ -47,43 +47,43 @@
{flushThr, non_neg_integer()} |
{syncInt, non_neg_integer()} |
{syncSize, non_neg_integer()} |
{syncOn, rumAtomLevel()} |
{syncOn, lgAtomLevel()} |
{checkInt, non_neg_integer()} |
{formatTer, atom()} |
{formatCfg, term()}.
{fmtTer, atom()} |
{fmtCfg, term()}.
%% BkdFile选项默认值
-define(RumDefLogLevel, info).
-define(RumDefRotateSize, 10485760). %% 10mb
-define(RumDefRotateDate, "$D0"). %% midnight
-define(RumDefRotateCnt, 5).
-define(RumDefRotateMod, rumRotatorIns).
-define(RumDefSyncLevel, error).
-define(RumDefSyncInt, 1000). %%
-define(RumDefSyncSize, 1024 * 64). %% 64kb
-define(RumDefCheckInt, 1000). %%
-define(RumDefCheckHWM, undefined).
-define(RumDefFlushQueue, false).
-define(RumDefFlushThr, 10).
-define(RumDefFormatTer, rumFormatTer).
-define(RumDefFormatterCfg, []).
-define(LgDefLogLevel, info).
-define(LgDefRotateSize, 10485760). %% 10mb
-define(LgDefRotateDate, "$D0"). %% midnight
-define(LgDefRotateCnt, 5).
-define(LgDefRotateMod, lgRotatorIns).
-define(LgDefSyncLevel, error).
-define(LgDefSyncInt, 1000). %%
-define(LgDefSyncSize, 1024 * 64). %% 64kb
-define(LgDefCheckInt, 1000). %%
-define(LgDefCheckHWM, undefined).
-define(LgDefFlushQueue, false).
-define(LgDefFlushThr, 10).
-define(LgDefFmtTer, lgFmtTer).
-define(LgDefFormatterCfg, []).
%%
-define(RumDefHandler,
-define(LgDefHandler,
[
{rumBkdConsole, [{level, info}]},
{rumBkdFile, [{id, error}, {file, <<"./log/error.log">>}, {level, '>=error'}, {size, 10485760}, {date, "$D0"}, {count, 5}]},
{rumBkdFile, [{id, console}, {file, <<"./log/console.log">>}, {level, '>=debug'}, {size, 10485760}, {date, "$D0"}, {count, 5}]}
{lgBkdConsole, [{level, info}]},
{lgBkdFile, [{id, error}, {file, <<"./log/error.log">>}, {level, '>=error'}, {size, 10485760}, {date, "$D0"}, {count, 5}]},
{lgBkdFile, [{id, console}, {file, <<"./log/console.log">>}, {level, '>=debug'}, {size, 10485760}, {date, "$D0"}, {count, 5}]}
]).
-record(rumShaper, {
-record(lgShaper, {
id :: any()
%%
, hwm = undefined :: 'undefined' | pos_integer()
%%
, mps = 0 :: non_neg_integer()
%%
, lastTime = rumTime:now() :: erlang:timestamp()
, lastTime = lgTime:now() :: erlang:timestamp()
%%
, dropped = 0 :: non_neg_integer()
%% If true, flush notify messages from msg queue at overload
@ -97,8 +97,8 @@
, filter = fun(_) -> false end :: fun()
}).
-record(rumMsg, {
severity :: rumAtomLevel()
-record(lgMsg, {
severity :: lgAtomLevel()
, pid :: pid()
, node :: node()
, module :: module()
@ -111,21 +111,21 @@
, destinations :: list()
}).
-type rumShaper() :: #rumShaper{}.
-type rumMsg() :: #rumMsg{}.
-type lgShaper() :: #lgShaper{}.
-type lgMsg() :: #lgMsg{}.
-type rumAtomLevel() :: none | debug | info | notice | warning | error | critical | alert | emergency.
-type rumMaskLevel() :: 0..256.
-type lgAtomLevel() :: none | debug | info | notice | warning | error | critical | alert | emergency.
-type lgMaskLevel() :: 0..256.
%%
-define(RumLevels, [debug, info, notice, warning, error, critical, alert, emergency, none]).
-define(LgLevels, [debug, info, notice, warning, error, critical, alert, emergency, none]).
-define(RunShouldLog(Sink, Level), (rumUtil:levelToNum(Level) band ?eRumCfg:get(Sink)) /= 0).
-define(LgShouldLog(Sink, Level), (lgUtil:levelToNum(Level) band ?eLogCfg:get(Sink)) /= 0).
-define(RunShouldLog(Level), (rumUtil:levelToNum(Level) band ?eRumCfg:get(?RumDefSink)) /= 0).
-define(LgShouldLog(Level), (lgUtil:levelToNum(Level) band ?eLogCfg:get(?LgDefSink)) /= 0).
-define(RunNotify(Level, Pid, Format, Args),
gen_emm:info_notify(?RumDefSink, {mWriteLog, #rumMsg{severity = Level, pid = Pid, node = node(), module = ?MODULE, function = ?FUNCTION_NAME, line = ?LINE, metadata = [], datetime = rumUtil:msToBinStr(), timestamp = rumTime:nowMs(), message = eFmt:formatBin(Format, Args), destinations = []}})).
-define(LgNotify(Level, Pid, Format, Args),
gen_emm:info_notify(?LgDefSink, {mWriteLog, #lgMsg{severity = Level, pid = Pid, node = node(), module = ?MODULE, function = ?FUNCTION_NAME, line = ?LINE, metadata = [], datetime = lgUtil:msToBinStr(), timestamp = lgTime:nowMs(), message = eFmt:formatBin(Format, Args), destinations = []}})).
%%使
-define(INT_LOG(Level, Format, Args),
@ -133,16 +133,16 @@
%%gen_event处理程序调用gen_eventwhich_handlers的死锁
spawn(
fun() ->
case catch (gen_emm:which_epm(?RumDefSink)) of
X when X == []; X == {'EXIT', noproc}; X == [rumBkdThrottle] ->
case catch (gen_emm:which_epm(?LgDefSink)) of
X when X == []; X == {'EXIT', noproc}; X == [lgBkdThrottle] ->
%% there's no handlers yet or lager isn't running, try again
%% in half a second.
timer:sleep(500),
?RunNotify(Level, Self, Format, Args);
?LgNotify(Level, Self, Format, Args);
_ ->
case ?RunShouldLog(Level) of
case ?LgShouldLog(Level) of
true ->
?RunNotify(Level, Self, Format, Args);
?LgNotify(Level, Self, Format, Args);
_ ->
ok
end

include/rumTime.hrl → include/lgTime.hrl Ver ficheiro


+ 3
- 6
rebar.config Ver ficheiro

@ -13,23 +13,20 @@
% is deliberatly broken and will generate an un-maskable warning
]}.
{erl_first_files, ["src/lager_util.erl"]}.
{deps, [
{eGbh, ".*", {git, "http://47.108.26.175:53000/SisMaker/eGbh.git", {branch, "master"}}},
{eFmt, ".*", {git, "http://47.108.26.175:53000/SisMaker/eFmt.git", {branch, "master"}}},
{eSync, ".*", {git, "http://47.108.26.175:53000/SisMaker/eSync.git", {branch, "master"}}},
{goldrush, ".*", {git, "http://47.108.26.175:53000/SisMaker/goldrush.git", {tag, "0.2.0"}}}
{goldrush, ".*", {git, "http://47.108.26.175:53000/SisMaker/goldrush.git", {tag, "0.2.0"}}},
{eSync, ".*", {git, "http://47.108.26.175:53000/SisMaker/eSync.git", {branch, "master"}}}
%%{observer_cli, ".*", {git, "https://github.com/zhongwencool/observer_cli.git", {tag, "1.6.1"}}}
]}.
{shell, [
% {config, "config/sys.config"},
{apps, [eRum]}
{apps, [eLog]}
]}.
{xref_checks, []}.
{xref_queries, [{"(XC - UC) || (XU - X - B - lager_default_tracer : Mod - erlang:\"(is_map|map_size)\"/1 - maps:to_list/1)", []}]}.
{cover_enabled, true}.
{edoc_opts, [{stylesheet_file, "./priv/edoc.css"}]}.

src/backend/rumBkdConsole.erl → src/backend/lgBkdConsole.erl Ver ficheiro

@ -1,20 +1,20 @@
-module(rumBkdConsole).
-module(lgBkdConsole).
%% Configuration is a proplist with the following keys:
%%`level' - log level to use
%%`use_stderr' - either `true' or `false', defaults to false. If set to true, use standard error to output console log messages
%%`formatTer' - the module to use when formatting log messages. Defaults to `rumFormatTer'
%%`formatCfg' - the format configuration string. Defaults to `time [ severity ] message'
%%`fmtTer' - the module to use when formatting log messages. Defaults to `lgFormatTer'
%%`fmtCfg' - the format configuration string. Defaults to `time [ severity ] message'
-behaviour(gen_emm).
-include("rumDef.hrl").
-include("lgDef.hrl").
-compile(inline).
-compile({inline_size, 128}).
-define(TERSE_FORMAT, [time, " ", color, "[", severity, "] ", message]).
-define(RumDefConsoleFmtCfg, ?TERSE_FORMAT ++ [eol()]).
-define(RumDefConsoleOpts, [{use_stderr, false}, {group_leader, false}, {id, ?MODULE}, {formatTer, ?RumDefFormatTer}, {formatCfg, ?RumDefConsoleFmtCfg}]).
-define(LgDefConsoleFmtCfg, ?TERSE_FORMAT ++ [eol()]).
-define(LgDefConsoleOpts, [{use_stderr, false}, {group_leader, false}, {id, ?MODULE}, {fmtTer, ?LgDefFmtTer}, {fmtCfg, ?LgDefConsoleFmtCfg}]).
-export([
init/1
@ -27,14 +27,14 @@
-record(state, {
id :: atom() | {atom(), any()}
, level :: rumMaskLevel()
, level :: lgMaskLevel()
, out = user :: user | standard_error | pid()
, formatTer :: atom()
, formatCfg :: any()
, fmtTer :: atom()
, fmtCfg :: any()
, colors = [] :: list()
}).
-spec init([rumConsoleOpt(), ...]) -> {ok, #state{}} | {error, atom()}.
-spec init([lgConsoleOpt(), ...]) -> {ok, #state{}} | {error, atom()}.
init(Opts) ->
case isNewStyleConsole() of
false ->
@ -49,25 +49,25 @@ init(Opts) ->
{error, {fatal, old_shell}};
_ ->
true = checkOpts(Opts),
CfgColors = ?IIF(rumUtil:get_env(colored, true), rumUtil:get_env(colors, []), []),
Colors = [{rumUtil:levelToNum(Level), ColorStr} || {Level, ColorStr} <- CfgColors],
Level = rumUtil:get_opt(level, Opts, undefined),
LevelMask = rumUtil:configToMask(Level),
[UseErr, GroupLeader, Id, FormatTer, FormatCfg] = [rumUtil:get_opt(Key, Opts, Def) || {Key, Def} <- ?RumDefConsoleOpts],
CfgColors = ?IIF(lgUtil:get_env(colored, true), lgUtil:get_env(colors, []), []),
Colors = [{lgUtil:levelToNum(Level), ColorStr} || {Level, ColorStr} <- CfgColors],
Level = lgUtil:get_opt(level, Opts, undefined),
LevelMask = lgUtil:configToMask(Level),
[UseErr, GroupLeader, Id, FmtTer, FmtCfg] = [lgUtil:get_opt(Key, Opts, Def) || {Key, Def} <- ?LgDefConsoleOpts],
Out = ?IIF(UseErr, standard_error, ?IIF(GroupLeader == false, user, begin erlang:monitor(process, GroupLeader), GroupLeader end)),
{ok, #state{level = LevelMask, id = Id, out = Out, formatTer = FormatTer, formatCfg = FormatCfg, colors = Colors}}
{ok, #state{level = LevelMask, id = Id, out = Out, fmtTer = FmtTer, fmtCfg = FmtCfg, colors = Colors}}
end.
checkOpts([]) -> true;
checkOpts([{id, {?MODULE, _}} | T]) ->
checkOpts(T);
checkOpts([{level, Level} | T]) ->
?IIF(rumUtil:validateLogLevel(Level) /= false, checkOpts(T), {error, {bad_level, Level}});
?IIF(lgUtil:validateLogLevel(Level) /= false, checkOpts(T), {error, {bad_level, Level}});
checkOpts([{use_stderr, Flag} | T]) when is_boolean(Flag) ->
checkOpts(T);
checkOpts([{formatTer, M} | T]) when is_atom(M) ->
checkOpts([{fmtTer, M} | T]) when is_atom(M) ->
checkOpts(T);
checkOpts([{formatCfg, C} | T]) when is_list(C) ->
checkOpts([{fmtCfg, C} | T]) when is_list(C) ->
checkOpts(T);
checkOpts([{group_leader, L} | T]) when is_pid(L) ->
checkOpts(T);
@ -77,7 +77,7 @@ checkOpts([H | _]) ->
handleCall(mGetLogLevel, State) ->
{reply, State#state.level, State};
handleCall({mSetLogLevel, Level}, State) ->
case rumUtil:validateLogLevel(Level) of
case lgUtil:validateLogLevel(Level) of
false ->
{reply, {error, bad_loglevel}, State};
LevelMask ->
@ -87,10 +87,10 @@ handleCall(_Msg, State) ->
?ERR("~p call receive unexpect msg ~p ~n ", [?MODULE, _Msg]),
{reply, ok, State}.
handleEvent({mWriteLog, Message}, #state{level = Level, out = Out, formatTer = FormatTer, formatCfg = FormatCfg, colors = Colors, id = ID}) ->
case rumUtil:isLoggAble(Message, Level, ID) of
handleEvent({mWriteLog, Message}, #state{level = Level, out = Out, fmtTer = FmtTer, fmtCfg = FmtCfg, colors = Colors, id = ID}) ->
case lgUtil:isLoggAble(Message, Level, ID) of
true ->
io:put_chars(Out, FormatTer:format(Message, FormatCfg, Colors)),
io:put_chars(Out, FmtTer:format(Message, FmtCfg, Colors)),
kpS;
_ ->
kpS
@ -107,7 +107,7 @@ handleInfo(_Msg, _State) ->
terminate(removeEpm, State) ->
%% have to do this asynchronously because we're in the event handlr
spawn(fun() -> eRum:clear_trace_by_destination(State#state.id) end),
spawn(fun() -> eLog:clear_trace_by_destination(State#state.id) end),
ok;
terminate(_Reason, _State) ->
ok.
@ -116,7 +116,7 @@ code_change(_OldVsn, State, _Extra) ->
{ok, State}.
eol() ->
?IIF(rumUtil:get_env(colored, true), "\e[0m\r\n", "\r\n").
?IIF(lgUtil:get_env(colored, true), "\e[0m\r\n", "\r\n").
isNewStyleConsole() ->
%% Criteria:

src/backend/rumBkdFile.erl → src/backend/lgBkdFile.erl Ver ficheiro

@ -1,6 +1,6 @@
-module(rumBkdFile).
-module(lgBkdFile).
%% @doc File backend for lager, with multiple file support.
%% @doc File backend for eLog, with multiple file support.
%% Multiple files are supported, each with the path and the loglevel being configurable.
%% The configuration paramter for this backend is a list of key-value 2-tuples. See the init() function for the available options.
%% This backend supports external and internal log rotation and will re-open handles to files if the inode changes.
@ -11,7 +11,7 @@
-behaviour(gen_emm).
-include("rumDef.hrl").
-include("lgDef.hrl").
-include_lib("kernel/include/file.hrl").
-compile(inline).
@ -30,7 +30,7 @@
-record(state, {
fileName :: string(),
level :: rumMaskLevel(),
level :: lgMaskLevel(),
fd :: file:io_device() | undefined,
inode :: integer() | undefined,
cTime :: file:date_time() | undefined,
@ -38,59 +38,59 @@
size = 0 :: integer(),
date :: undefined | string(),
count = 10 :: integer(),
rotator = lager_util :: atom(),
shaper :: rumShaper(),
formatTer :: atom(),
formatCfg :: any(),
rotator = lgRotatorIns :: atom(),
shaper :: lgShaper(),
fmtTer :: atom(),
fmtCfg :: any(),
syncOn :: integer(),
checkInt = ?RumDefCheckInt :: non_neg_integer(), %%
syncInt = ?RumDefSyncInt :: non_neg_integer(),
syncSize = ?RumDefSyncSize :: non_neg_integer(),
lastCheck = rumTime:nowMs() :: erlang:timestamp(), %%
checkInt = ?LgDefCheckInt :: non_neg_integer(), %%
syncInt = ?LgDefSyncInt :: non_neg_integer(),
syncSize = ?LgDefSyncSize :: non_neg_integer(),
lastCheck = lgTime:nowMs() :: erlang:timestamp(), %%
osType :: atom()
}).
-spec init([rumFileOpt(), ...]) -> {ok, #state{}} | {error, atom()}.
-spec init([lgFileOpt(), ...]) -> {ok, #state{}} | {error, atom()}.
init(Opts) ->
true = checkOpts(Opts, false),
RelName = rumUtil:get_opt(file, Opts, undefined),
CfgLevel = rumUtil:get_opt(level, Opts, ?RumDefLogLevel),
CfgDate = rumUtil:get_opt(date, Opts, ?RumDefRotateDate),
Size = rumUtil:get_opt(size, Opts, ?RumDefRotateSize),
Count = rumUtil:get_opt(count, Opts, ?RumDefRotateCnt),
Rotator = rumUtil:get_opt(rotator, Opts, ?RumDefRotateMod),
HWM = rumUtil:get_opt(hWM, Opts, ?RumDefCheckHWM),
FlushQueue = rumUtil:get_opt(flushQueue, Opts, ?RumDefFlushQueue),
FlushThr = rumUtil:get_opt(flushThr, Opts, ?RumDefFlushThr),
SyncInt = rumUtil:get_opt(syncInt, Opts, ?RumDefSyncInt),
CfgCheckInt = rumUtil:get_opt(checkInt, Opts, ?RumDefCheckInt),
SyncSize = rumUtil:get_opt(syncSize, Opts, ?RumDefSyncSize),
CfgSyncOn = rumUtil:get_opt(syncOn, Opts, ?RumDefSyncLevel),
FormatTer = rumUtil:get_opt(formatTer, Opts, ?RumDefFormatTer),
CfgFormatCfg = rumUtil:get_opt(formatCfg, Opts, ?RumDefFormatterCfg),
RelName = lgUtil:get_opt(file, Opts, undefined),
CfgLevel = lgUtil:get_opt(level, Opts, ?LgDefLogLevel),
CfgDate = lgUtil:get_opt(date, Opts, ?LgDefRotateDate),
Size = lgUtil:get_opt(size, Opts, ?LgDefRotateSize),
Count = lgUtil:get_opt(count, Opts, ?LgDefRotateCnt),
Rotator = lgUtil:get_opt(rotator, Opts, ?LgDefRotateMod),
HWM = lgUtil:get_opt(hWM, Opts, ?LgDefCheckHWM),
FlushQueue = lgUtil:get_opt(flushQueue, Opts, ?LgDefFlushQueue),
FlushThr = lgUtil:get_opt(flushThr, Opts, ?LgDefFlushThr),
SyncInt = lgUtil:get_opt(syncInt, Opts, ?LgDefSyncInt),
CfgCheckInt = lgUtil:get_opt(checkInt, Opts, ?LgDefCheckInt),
SyncSize = lgUtil:get_opt(syncSize, Opts, ?LgDefSyncSize),
CfgSyncOn = lgUtil:get_opt(syncOn, Opts, ?LgDefSyncLevel),
FmtTer = lgUtil:get_opt(fmtTer, Opts, ?LgDefFmtTer),
CfgFmtCfg = lgUtil:get_opt(fmtCfg, Opts, ?LgDefFormatterCfg),
%%
Level = rumUtil:configToMask(CfgLevel),
SyncOn = rumUtil:configToMask(CfgSyncOn),
Level = lgUtil:configToMask(CfgLevel),
SyncOn = lgUtil:configToMask(CfgSyncOn),
CheckInt = ?IIF(CfgCheckInt == always, 0, CfgCheckInt),
{ok, Date} = rumUtil:parseRotateSpec(CfgDate),
FileName = rumUtil:parsePath(RelName),
{ok, Date} = lgUtil:parseRotateSpec(CfgDate),
FileName = lgUtil:parsePath(RelName),
FormatCfg =
case CfgFormatCfg of
FmtCfg =
case CfgFmtCfg of
[] ->
Whitelist = rumUtil:get_env(metadataWhitelist, []),
rumFormatTer:formatCfg(Whitelist);
MdWhitelist = lgUtil:get_env(mdWhitelist, []),
lgFmtTer:fmtCfg(MdWhitelist);
_ ->
CfgFormatCfg
CfgFmtCfg
end,
scheduleRotation(Date, FileName),
Shaper = #rumShaper{hwm = HWM, flushQueue = FlushQueue, flushThr = FlushThr, id = FileName},
Shaper = #lgShaper{hwm = HWM, flushQueue = FlushQueue, flushThr = FlushThr, id = FileName},
TemState = #state{
fileName = FileName, level = Level, size = Size, date = Date
, count = Count, rotator = Rotator, shaper = Shaper
, formatTer = FormatTer, formatCfg = FormatCfg
, fmtTer = FmtTer, fmtCfg = FmtCfg
, syncOn = SyncOn, syncInt = SyncInt
, syncSize = SyncSize, checkInt = CheckInt
},
@ -105,7 +105,7 @@ init(Opts) ->
handleCall(mGetLogLevel, #state{level = Level} = State) ->
{reply, Level, State};
handleCall({mSetLogLevel, Level}, #state{fileName = FileName} = State) ->
case rumUtil:validateLogLevel(Level) of
case lgUtil:validateLogLevel(Level) of
false ->
{reply, {error, bad_loglevel}, State};
LevelMask ->
@ -118,9 +118,9 @@ handleCall({mSetLogHwm, Hwm}, #state{shaper = Shaper, fileName = FileName} = Sta
false ->
{reply, {error, bad_log_hwm}, State};
_ ->
NewShaper = Shaper#rumShaper{hwm = Hwm},
NewShaper = Shaper#lgShaper{hwm = Hwm},
?INT_LOG(notice, "Changed loghwm of ~ts to ~p", [FileName, Hwm]),
{reply, {last_loghwm, Shaper#rumShaper.hwm}, State#state{shaper = NewShaper}}
{reply, {last_loghwm, Shaper#lgShaper.hwm}, State#state{shaper = NewShaper}}
end;
handleCall(mRotate, State = #state{fileName = File}) ->
{ok, NewState} = handleInfo({mRotate, File}, State),
@ -129,26 +129,26 @@ handleCall(_Msg, State) ->
?ERR("~p call receive unexpect msg ~p ~n ", [?MODULE, _Msg]),
{reply, ok, State}.
handleEvent({mWriteLog, Message}, #state{fileName = FileName, level = Level, shaper = Shaper, formatTer = FormatTer, formatCfg = FormatCfg} = State) ->
case rumUtil:isLoggAble(Message, Level, {rumBkdFile, FileName}) of
handleEvent({mWriteLog, Message}, #state{fileName = FileName, level = Level, shaper = Shaper, fmtTer = FmtTer, fmtCfg = FmtCfg} = State) ->
case lgUtil:isLoggAble(Message, Level, {lgBkdFile, FileName}) of
true ->
#rumMsg{timestamp = Timestamp, severity = Severity} = Message,
case rumUtil:checkHwm(Shaper) of
#lgMsg{timestamp = Timestamp, severity = Severity} = Message,
case lgUtil:checkHwm(Shaper) of
{true, _Drop, NewShaper} ->
{ok, writeLog(State#state{shaper = NewShaper}, Timestamp, Severity, FormatTer:format(Message, FormatCfg))};
{ok, writeLog(State#state{shaper = NewShaper}, Timestamp, Severity, FmtTer:format(Message, FmtCfg))};
{drop, Drop, NewShaper} ->
TemState =
case Drop =< 0 of
true ->
State;
_ ->
ReportStr = eFmt:format(<<"rumBkdFile dropped ~p messages in the last second that exceeded the limit of ~p messages/sec">>, [Drop, NewShaper#rumShaper.hwm]),
NowMs = rumTime:nowMs(),
NowStr = rumUtil:msToBinStr(NowMs),
ReportMsg = #rumMsg{severity = ?warning, pid = self(), node = node(), module = ?MODULE, function = ?FUNCTION_NAME, line = ?LINE, metadata = [], datetime = NowStr, timestamp = NowMs, message = ReportStr, destinations = []},
writeLog(State, NowMs, ?warning, FormatTer:format(ReportMsg, FormatCfg))
ReportStr = eFmt:format(<<"lgBkdFile dropped ~p messages in the last second that exceeded the limit of ~p messages/sec">>, [Drop, NewShaper#lgShaper.hwm]),
NowMs = lgTime:nowMs(),
NowStr = lgUtil:msToBinStr(NowMs),
ReportMsg = #lgMsg{severity = ?warning, pid = self(), node = node(), module = ?MODULE, function = ?FUNCTION_NAME, line = ?LINE, metadata = [], datetime = NowStr, timestamp = NowMs, message = ReportStr, destinations = []},
writeLog(State, NowMs, ?warning, FmtTer:format(ReportMsg, FmtCfg))
end,
{ok, writeLog(TemState#state{shaper = NewShaper}, Timestamp, Severity, FormatTer:format(Message, FormatCfg))};
{ok, writeLog(TemState#state{shaper = NewShaper}, Timestamp, Severity, FmtTer:format(Message, FmtCfg))};
{false, _, NewShaper} ->
{ok, State#state{shaper = NewShaper}}
end;
@ -164,18 +164,18 @@ handleInfo({mRotate, File}, #state{fileName = File, count = Count, date = Date,
_ = Rotator:rotateLogFile(File, Count),
scheduleRotation(File, Date),
{ok, NewState};
handleInfo({mShaperExpired, Name}, #state{shaper = Shaper, fileName = Name, formatTer = FormatTer, formatCfg = FormatCfg} = State) ->
case Shaper#rumShaper.dropped of
handleInfo({mShaperExpired, Name}, #state{shaper = Shaper, fileName = Name, fmtTer = FmtTer, fmtCfg = FmtCfg} = State) ->
case Shaper#lgShaper.dropped of
0 ->
ignore;
Dropped ->
ReportStr = eFmt:format(<<"rumBkdFile dropped ~p messages in the last second that exceeded the limit of ~p messages/sec">>, [Dropped, Shaper#rumShaper.hwm]),
NowMs = rumTime:nowMs(),
NowStr = rumUtil:msToBinStr(NowMs),
ReportMsg = #rumMsg{severity = ?warning, pid = self(), node = node(), module = ?MODULE, function = ?FUNCTION_NAME, line = ?LINE, metadata = [], datetime = NowStr, timestamp = NowMs, message = ReportStr, destinations = []},
writeLog(State, NowMs, ?warning, FormatTer:format(ReportMsg, FormatCfg))
ReportStr = eFmt:format(<<"lgBkdFile dropped ~p messages in the last second that exceeded the limit of ~p messages/sec">>, [Dropped, Shaper#lgShaper.hwm]),
NowMs = lgTime:nowMs(),
NowStr = lgUtil:msToBinStr(NowMs),
ReportMsg = #lgMsg{severity = ?warning, pid = self(), node = node(), module = ?MODULE, function = ?FUNCTION_NAME, line = ?LINE, metadata = [], datetime = NowStr, timestamp = NowMs, message = ReportStr, destinations = []},
writeLog(State, NowMs, ?warning, FmtTer:format(ReportMsg, FmtCfg))
end,
{ok, State#state{shaper = Shaper#rumShaper{dropped = 0, mps = 0, lastTime = rumTime:now()}}};
{ok, State#state{shaper = Shaper#lgShaper{dropped = 0, mps = 0, lastTime = lgTime:now()}}};
handleInfo(_Msg, _State) ->
?ERR("~p info receive unexpect msg ~p ~n ", [?MODULE, _Msg]),
kpS.
@ -244,15 +244,15 @@ isWriteCheck(Fd, LastCheck, CheckInt, Name, Inode, CTime, Timestamp) ->
true;
_ ->
% We need to know if the file has changed "out from under lager" so we don't write to an invalid Fd
{Result, _FInfo} = rumUtil:isFileChanged(Name, Inode, CTime),
{Result, _FInfo} = lgUtil:isFileChanged(Name, Inode, CTime),
Result
end.
%% Convert the config into a gen_event handler ID
configToId(Config) ->
case rumUtil:get_opt(id, Config, undefined) of
case lgUtil:get_opt(id, Config, undefined) of
undefined ->
case rumUtil:get_opt(file, Config, undefined) of
case lgUtil:get_opt(file, Config, undefined) of
undefined ->
erlang:error(no_file);
File ->
@ -267,7 +267,7 @@ checkOpts([], IsFile) ->
checkOpts([{file, _File} | Tail], _IsFile) ->
checkOpts(Tail, true);
checkOpts([{level, Level} | Tail], IsFile) ->
?IIF(rumUtil:validateLogLevel(Level) /= false, checkOpts(Tail, IsFile), {error, {invalid_log_level, Level}});
?IIF(lgUtil:validateLogLevel(Level) /= false, checkOpts(Tail, IsFile), {error, {invalid_log_level, Level}});
checkOpts([{size, Size} | Tail], IsFile) when is_integer(Size), Size >= 0 ->
checkOpts(Tail, IsFile);
checkOpts([{count, Count} | Tail], IsFile) when is_integer(Count), Count >= 0 ->
@ -285,10 +285,10 @@ checkOpts([{syncSize, SyncSize} | Tail], IsFile) when is_integer(SyncSize), Sync
checkOpts([{checkInt, CheckInt} | Tail], IsFile) when is_integer(CheckInt), CheckInt >= 0; CheckInt == always ->
checkOpts(Tail, IsFile);
checkOpts([{syncOn, Level} | Tail], IsFile) ->
?IIF(rumUtil:validateLogLevel(Level) /= false, checkOpts(Tail, IsFile), {error, {invalid_sync_on, Level}});
checkOpts([{formatTer, Fmt} | Tail], IsFile) when is_atom(Fmt) ->
?IIF(lgUtil:validateLogLevel(Level) /= false, checkOpts(Tail, IsFile), {error, {invalid_sync_on, Level}});
checkOpts([{fmtTer, Fmt} | Tail], IsFile) when is_atom(Fmt) ->
checkOpts(Tail, IsFile);
checkOpts([{formatCfg, FmtCfg} | Tail], IsFile) when is_list(FmtCfg) ->
checkOpts([{fmtCfg, FmtCfg} | Tail], IsFile) when is_list(FmtCfg) ->
checkOpts(Tail, IsFile);
checkOpts([{flushQueue, FlushCfg} | Tail], IsFile) when is_boolean(FlushCfg) ->
checkOpts(Tail, IsFile);
@ -300,7 +300,7 @@ checkOpts([Other | _Tail], _IsFile) ->
scheduleRotation(undefined, _FileName) ->
ok;
scheduleRotation(Date, Name) ->
erlang:send_after(rumUtil:calcNextRotateMs(Date), self(), {mRotate, Name}),
erlang:send_after(lgUtil:calcNextRotateMs(Date), self(), {mRotate, Name}),
ok.
closeFile(#state{fd = Fd} = State) ->

src/backend/rumBkdThrottle.erl → src/backend/lgBkdThrottle.erl Ver ficheiro

@ -1,4 +1,4 @@
-module(rumBkdThrottle).
-module(lgBkdThrottle).
%% @doc一个简单的gen_event后端
%%使gen_event处理程序是因为进程获得了自己的邮箱的大小不涉及获取锁定
@ -6,7 +6,7 @@
-behaviour(gen_emm).
-include("rumDef.hrl").
-include("lgDef.hrl").
-compile(inline).
-compile({inline_size, 128}).
@ -28,7 +28,7 @@
}).
init([{sink, Sink}, Hwm, Window]) ->
rumConfig:ptSet({Sink, async}, true),
lgConfig:ptSet({Sink, async}, true),
{ok, #state{sink = Sink, hwm = Hwm, window = Hwm - Window}}.
handleCall(mGetLogLevel, State) ->
@ -44,11 +44,11 @@ handleEvent({mWriteLog, _Message}, #state{hwm = Hwm, window = Window, async = As
if
MsgLen > Hwm andalso Async ->
%% need to flip to sync mode
rumConfig:ptSet({State#state.sink, async}, false),
lgConfig:ptSet({State#state.sink, async}, false),
{ok, State#state{async = false}};
MsgLen < Window andalso not Async ->
%% need to flip to async mode
rumConfig:ptSet({State#state.sink, async}, true),
lgConfig:ptSet({State#state.sink, async}, true),
{ok, State#state{async = true}};
true ->
%% nothing needs to change

src/crashLog/rumCrashLog.erl → src/crashLog/lgCrashLog.erl Ver ficheiro

@ -1,6 +1,6 @@
-module(rumCrashLog).
-module(lgCrashLog).
%% @doc eRum crash log writererror_logger错误消息以其原始格式发送到`crash_log`, `crash_log`crash logging
%% @doc eLog crash log writererror_logger错误消息以其原始格式发送到`crash_log`, `crash_log`crash logging
%% Crash logs are printed safely using trunc_io via code mostly lifted from riak_err.
%% `crashLogMsgSize` var用于指定最大值要记录的任何消息的大小
%% `crashLogFileSize` 0
@ -9,7 +9,7 @@
-behaviour(gen_srv).
-include("rumDef.hrl").
-include("lgDef.hrl").
-compile(inline).
-compile({inline_size, 128}).
@ -50,8 +50,8 @@ start_link(Filename, MaxFmtSize, MaxFileSize, Date, Count, Rotator) ->
gen_srv:start_link({local, ?MODULE}, ?MODULE, {Filename, MaxFmtSize, MaxFileSize, Date, Count, Rotator}, []).
init({RelFilename, MaxFmtSize, MaxFileSize, CfgDate, Count, Rotator}) ->
{ok, Date} = rumUtil:parseRotateSpec(CfgDate),
Filename = rumUtil:parsePath(RelFilename),
{ok, Date} = lgUtil:parseRotateSpec(CfgDate),
Filename = lgUtil:parsePath(RelFilename),
case Rotator:openLogFile(Filename, false) of
{ok, Fd, Inode, CTime, _Size} ->
scheduleRotation(Date),
@ -91,7 +91,7 @@ code_change(_OldVsn, State, _Extra) ->
scheduleRotation(undefined) -> ok;
scheduleRotation(Date) ->
erlang:send_after(rumUtil:calcNextRotateMs(Date), self(), mRotate),
erlang:send_after(lgUtil:calcNextRotateMs(Date), self(), mRotate),
ok.
otherNodeSuffix(Pid) when node(Pid) =/= node() ->
@ -104,7 +104,7 @@ otherNodeSuffix(Pid) when node(Pid) =/= node() ->
end.
perhapsSaslReport(error_report, {Pid, Type, Report}, FmtMaxBytes) ->
case rumUtil:isErrorReport(Type) of
case lgUtil:isErrorReport(Type) of
true ->
{saslTypeToReportHead(Type), Pid, saslLimitedStr(Type, Report, FmtMaxBytes), true};
false ->
@ -129,10 +129,10 @@ saslTypeToReportHead(progress) ->
<<"PROGRESS REPORT">>.
saslLimitedStr(supervisor_report, Report, FmtMaxBytes) ->
Name = rumUtil:sup_get(supervisor, Report),
Context = rumUtil:sup_get(errorContext, Report),
Reason = rumUtil:sup_get(reason, Report),
Offender = rumUtil:sup_get(offender, Report),
Name = lgUtil:sup_get(supervisor, Report),
Context = lgUtil:sup_get(errorContext, Report),
Reason = lgUtil:sup_get(reason, Report),
Offender = lgUtil:sup_get(offender, Report),
FmtString = <<" Supervisor: ~p~n Context: ~p~n Reason: "
"~s~n Offender: ~s~n~n">>,
ReasonStr = eFmt:formatBin(<<"~p">>, [Reason], [{charsLimit, FmtMaxBytes}]),
@ -170,7 +170,7 @@ writeLog(Event, #state{fileName = FileName, fd = FD, inode = Inode, cTime = CTim
_ = Rotator:rotateLogFile(FileName, Count),
handleCast({mWriteLog, Event}, State);
_ ->
TimeBinStr = rumUtil:msToBinStr(),
TimeBinStr = lgUtil:msToBinStr(),
Time = [TimeBinStr, <<" =">>, ReportStr, <<"====\n">>],
NodeSuffix = otherNodeSuffix(Pid),
Msg = eFmt:formatBin("~s~s~s", [Time, MsgStr, NodeSuffix]),

src/eRum.app.src → src/eLog.app.src Ver ficheiro

@ -1,11 +1,11 @@
{application, eRum,
{application, eLog,
[
{description, "Erlang logger application"},
{vsn, "3.9.0"},
{modules, []},
{applications, [kernel, stdlib, goldrush]},
{registered, []},
{mod, {eRum_app, []}},
{mod, {eLog_app, []}},
{env, []},
{licenses, ["MIT License"]}
]}.

src/eRum.erl → src/eLog.erl Ver ficheiro

@ -1,8 +1,8 @@
-module(eRum).
-module(eLog).
-include("rumDef.hrl").
-include("rumCom.hrl").
-include("lgDef.hrl").
-include("lgCom.hrl").
-compile(inline).
-compile({inline_size, 150}).
@ -62,7 +62,7 @@
-record(trace_func_state_v1, {
pid :: undefined | pid(),
level :: rumAtomLevel(),
level :: lgAtomLevel(),
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(), rumAtomLevel(), 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 rumTransform (lines 173-216)
-spec dispatchLog(atom(), lgAtomLevel(), 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 lgTransform (lines 173-216)
dispatchLog(Sink, Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Size, Safety) ->
case ?eRumCfg:get(Sink) band Severity /= 0 of
case ?eLogCfg: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 = rumConfig:ptGet({Sink, trace}, []),
Destinations = ?IIF(TraceFilters /= [], rumUtil:check_traces(Metadata, Severity, TraceFilters, []), []),
TraceFilters = lgConfig:ptGet({Sink, trace}, []),
Destinations = ?IIF(TraceFilters /= [], lgUtil:check_traces(Metadata, Severity, TraceFilters, []), []),
MsgStr = ?IIF(Args /= [] andalso Args /= undefined, ?IIF(Safety == safe, safeFormat(Format, [Args], [{charsLimit, Size}]), unsafeFormat(Format, [Args])), Format),
NowMs = rumTime:nowMs(),
NowStr = rumUtil:msToBinStr(NowMs),
RumMsg = #rumMsg{severity = Severity, pid = Pid, node = Node, module = Module, function = Function, line = Line, metadata = Metadata, datetime = NowStr, timestamp = NowMs, message = MsgStr, destinations = Destinations},
NowMs = lgTime:nowMs(),
NowStr = lgUtil:msToBinStr(NowMs),
LgMsg = #lgMsg{severity = Severity, pid = Pid, node = Node, module = Module, function = Function, line = Line, metadata = Metadata, datetime = NowStr, timestamp = NowMs, message = MsgStr, destinations = Destinations},
case rumConfig:ptGet({Sink, async}, false) of
case lgConfig:ptGet({Sink, async}, false) of
true ->
gen_emm:info_notify(Sink, {mWriteLog, RumMsg});
false ->
gen_emm:call_notify(Sink, {mWriteLog, RumMsg})
gen_emm:info_notify(Sink, {mWriteLog, LgMsg});
_ ->
gen_emm:call_notify(Sink, {mWriteLog, LgMsg})
end,
case whereis(?RumTrackSink) of
case whereis(?LgTrackSink) of
undefined ->
ok;
TraceSinkPid ->
gen_emm:info_notify(TraceSinkPid, {mWriteLog, RumMsg})
gen_emm:info_notify(TraceSinkPid, {mWriteLog, LgMsg})
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(?RumDefSink, Handler, undefined, Level).
setLogLevel(?LgDefSink, 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(?RumDefSink, Handler, Ident, Level).
setLogLevel(?LgDefSink, 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(?RumDefSink, Handler).
getLogLevel(?LgDefSink, 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 rumUtil:maskToLevels(Mask) of
case lgUtil: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(?RumDefSink, Handler, Hwm).
setLogHwm(?LgDefSink, 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 = rumConfig:ptGet({Sink, trace}, []),
Traces = lgConfig:ptGet({Sink, trace}, []),
AllLogLevel = allLogLevel(getLogLevels(Sink), 0),
case Traces /= [] of
true ->
ets:insert(?eRumEts, {Sink, 16#ff}),
AllSinks = ets:tab2list(?eRumEts),
rumKvsToBeam:load(?eRumCfg, AllSinks);
ets:insert(?eLogEts, {Sink, 16#ff}),
AllSinks = ets:tab2list(?eLogEts),
lgKvsToBeam:load(?eLogCfg, AllSinks);
_ ->
ets:insert(?eRumEts, {Sink, AllLogLevel}),
AllSinks = ets:tab2list(?eRumEts),
rumKvsToBeam:load(?eRumCfg, AllSinks)
ets:insert(?eLogEts, {Sink, AllLogLevel}),
AllSinks = ets:tab2list(?eLogEts),
lgKvsToBeam:load(?eLogCfg, AllSinks)
end.
allLogLevel([], Acc) ->
@ -211,7 +211,7 @@ allLogLevel([OneLv | Levels], Acc) ->
allLogLevel(Levels, OneLv bor Acc).
rotateSink(Sink) ->
Handlers = rumConfig:ptGet(handlers, []),
Handlers = lgConfig: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,
rumConfig:ptGet(handlers, []))).
lgConfig:ptGet(handlers, []))).
rotateHandlers(Handlers) ->
@ -229,14 +229,14 @@ rotateHandlers(Handlers) ->
rotateHandler(Handler) ->
Handlers = rumConfig:ptGet(handlers, []),
Handlers = lgConfig: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, ?RumRotateTimeout).
gen_emm:call(Sink, Handler, mRotate, ?LgRotateTimeout).
%% @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({rumBkdFile, File}, Filter, Level) ->
trace({lgBkdFile, 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 = rumUtil:parsePath(File),
case validateTraceFilters(Filter, Level, {rumBkdFile, FileName}) of
FileName = lgUtil:parsePath(File),
case validateTraceFilters(Filter, Level, {lgBkdFile, FileName}) of
{Sink, {ok, Trace}} ->
Handlers = rumConfig:ptGet(handlers, []),
Handlers = lgConfig:ptGet(handlers, []),
%% check if this file backend is already installed
Res =
case rumUtil:find_file(FileName, Handlers) of
case lgUtil: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, {rumBkdFile, FileName}, LogFileConfig),
rumConfig:ptSet(handlers, [HandlerInfo | Handlers]),
eLog_app:startHandler(Sink, {lgBkdFile, FileName}, LogFileConfig),
lgConfig: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, {{rumBkdFile, FileName}, Filter, Level}};
{ok, {{lgBkdFile, FileName}, Filter, Level}};
{error, _} = E ->
E
end;
@ -319,7 +319,7 @@ trace_console(Filter) ->
trace_console(Filter, debug).
trace_console(Filter, Level) ->
trace(rumBkdConsole, Filter, Level).
trace(lgBkdConsole, 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, ?RumDefSink),
Sink = proplists:get_value(sink, Filters, ?LgDefSink),
{Sink,
rumUtil:validate_trace({
lgUtil: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 = rumConfig:ptGet({Sink, trace}, []),
Traces = lgConfig:ptGet({Sink, trace}, []),
NewTraces = lists:delete(Trace, Traces),
_ = rumUtil:trace_filter([element(1, T) || T <- NewTraces]),
_ = lgUtil:trace_filter([element(1, T) || T <- NewTraces]),
%MinLevel = minimum_loglevel(get_loglevels() ++ get_trace_levels(NewTraces)),
rumConfig:ptSet({Sink, trace}, NewTraces),
eRum:upLogLevelCfg(Sink),
lgConfig: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, []),
rumConfig:ptSet(handlers,
lgConfig:ptSet(handlers,
lists:keydelete(Backend, 1,
rumConfig:ptGet(handlers, [])));
lgConfig: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(), rumAtomLevel()) -> ok.
-spec install_trace(pid(), lgAtomLevel()) -> ok.
install_trace(Pid, Level) ->
install_trace(Pid, Level, []).
-spec install_trace(pid(), rumAtomLevel(), [{count, infinity | pos_integer()} | {format_string, string()} | {timeout, timeout()}]) -> ok.
-spec install_trace(pid(), lgAtomLevel(), [{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(),
rumConfig:ptGet(handlers, []))).
lgConfig:ptGet(handlers, []))).
clear_traces_by_sink(Sinks) ->
lists:foreach(
fun(S) ->
rumConfig:ptSet({S, trace}, []),
eRum:upLogLevelCfg(S)
lgConfig:ptSet({S, trace}, []),
eLog:upLogLevelCfg(S)
end,
Sinks).
@ -415,10 +415,10 @@ clear_trace_by_destination(ID) ->
clear_all_traces() ->
Handlers = rumConfig:ptGet(handlers, []),
Handlers = lgConfig:ptGet(handlers, []),
clear_traces_by_sink(list_all_sinks()),
_ = rumUtil:trace_filter(none),
rumConfig:ptSet(handlers,
_ = lgUtil:trace_filter(none),
lgConfig: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 = rumConfig:ptGet({S, trace}, []),
Traces = lgConfig:ptGet({S, trace}, []),
Acc ++ lists:map(fun(T) -> {S, T} end, Traces)
end,
[],
Sinks).
status() ->
Handlers = rumConfig:ptGet(handlers, []),
Handlers = lgConfig: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 rumUtil:maskToLevels(Level) of
case lgUtil:maskToLevels(Level) of
[] -> none;
Levels -> hd(Levels)
end,
@ -466,7 +466,7 @@ status() ->
end || {Sink, {Filter, Level, Destination}} <- Traces],
[
"Tracing Reductions:\n",
case ?RumDefTracer:info('query') of
case ?LgDefTracer: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(?RumDefTracer:info(Table) div TraceCount),
integer_to_list(?LgDefTracer: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
{rumBkdFile, File} ->
{lgBkdFile, File} ->
io_lib:format("File ~ts (~s) at level ~p\n", [File, Sink, Level]);
rumBkdConsole ->
lgBkdConsole ->
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 = rumConfig:ptGet({Sink, trace}, []),
Traces = lgConfig:ptGet({Sink, trace}, []),
case lists:member(Trace, Traces) of
false ->
NewTraces = [Trace | Traces],
_ = rumUtil:trace_filter([element(1, T) || T <- NewTraces]),
rumConfig:ptSet({Sink, trace}, [Trace | Traces]),
eRum:upLogLevelCfg(Sink);
_ = lgUtil:trace_filter([element(1, T) || T <- NewTraces]),
lgConfig: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

src/eRum_app.erl → src/eLog_app.erl Ver ficheiro

@ -1,9 +1,9 @@
-module(eRum_app).
-module(eLog_app).
-behaviour(application).
-include("rumCom.hrl").
-include("rumDef.hrl").
-include("lgCom.hrl").
-include("lgDef.hrl").
-export([
start/2
@ -15,7 +15,7 @@
]).
start(_StartType, _StartArgs) ->
{ok, Pid} = eRum_sup:start_link(),
{ok, Pid} = eLog_sup:start_link(),
SavedHandlers = doStart(),
doStartExtraSink(),
doStartTraces(),
@ -24,28 +24,28 @@ start(_StartType, _StartArgs) ->
%% (sink)
doStart() ->
%%
tryStartAsyncMgr(rumUtil:get_env(asyncThreshold, undefined), rumUtil:get_env(asyncThrWindow, undefined), ?RumDefSink),
tryStartAsyncMgr(lgUtil:get_env(asyncThreshold, undefined), lgUtil:get_env(asyncThrWindow, undefined), ?LgDefSink),
%%killer
tryInstallKiller(rumUtil:get_env(killerHwm, undefined), rumUtil:get_env(killerReTime, undefined), ?RumDefSink),
tryInstallKiller(lgUtil:get_env(killerHwm, undefined), lgUtil:get_env(killerReTime, undefined), ?LgDefSink),
%%handler
tryStartHandlers(rumUtil:get_env(handlers, ?RumDefHandler), ?RumDefSink),
tryStartHandlers(lgUtil:get_env(handlers, ?LgDefHandler), ?LgDefSink),
%% error logger
SavedHandlers = tryStartErrLoggerHandler(rumUtil:get_env(errLoggerRedirect, true), rumUtil:get_env(errLoggerHwm, undefined), rumUtil:get_env(errLoggerWhitelist, [])),
eRum:upLogLevelCfg(?RumDefSink),
SavedHandlers = tryStartErrLoggerHandler(lgUtil:get_env(errLoggerRedirect, true), lgUtil:get_env(errLoggerHwm, undefined), lgUtil:get_env(errLoggerWhitelist, [])),
eLog:upLogLevelCfg(?LgDefSink),
SavedHandlers.
startSink(?RumDefSink) -> doStart();
startSink(?LgDefSink) -> doStart();
startSink(Sink) ->
AllSinksDef = rumUtil:get_env(extraSinks, []),
AllSinksDef = lgUtil:get_env(extraSinks, []),
SinkValue = lists:keyfind(Sink, 1, AllSinksDef),
SinkOpts = ?IIF(SinkValue == false, [], element(2, SinkValue)),
startSink(Sink, SinkOpts).
startSink(Sink, Opts) ->
ChildId = rumUtil:makeInnerSinkName(Sink),
ChildId = lgUtil:makeInnerSinkName(Sink),
SinkSpec = #{
id => ChildId,
start => {gen_emm, start_link, [{local, Sink}]},
@ -53,32 +53,32 @@ startSink(Sink, Opts) ->
shutdown => 5000,
type => worker,
modules => [dynamic]},
_ = supervisor:start_child(eRum_sup, SinkSpec),
_ = supervisor:start_child(eLog_sup, SinkSpec),
tryStartAsyncMgr(proplists:get_value(asyncThreshold, Opts, undefined), proplists:get_value(asyncThrWindow, Opts, undefined), Sink),
tryInstallKiller(proplists:get_value(killerHwm, Opts, undefined), proplists:get_value(killerReTime, Opts, undefined), Sink),
tryStartHandlers(proplists:get_value(handlers, Opts, []), Sink),
eRum:upLogLevelCfg(Sink).
eLog:upLogLevelCfg(Sink).
doStartExtraSink() ->
doStartExtraSinks(rumUtil:get_env(extraSinks, [])).
doStartExtraSinks(lgUtil:get_env(extraSinks, [])).
doStartExtraSinks(Sinks) ->
[startSink(Sink, Opts) || {Sink, Opts} <- Sinks],
ok.
doStartTraces() ->
_ = rumUtil:trace_filter(none),
_ = lgUtil:trace_filter(none),
ok = addTraces().
addTraces() ->
Traces = rumUtil:get_env(traces, []),
Traces = lgUtil:get_env(traces, []),
[startTrace(One) || One <- Traces],
ok.
startTrace({Handler, Filter}) ->
{ok, _} = eRum:trace(Handler, Filter);
{ok, _} = eLog:trace(Handler, Filter);
startTrace({Handler, Filter, Level}) when is_atom(Level) ->
{ok, _} = eRum:trace(Handler, Filter, Level).
{ok, _} = eLog:trace(Handler, Filter, Level).
stop(Handlers) ->
[error_logger:add_report_handler(Handler) || Handler <- Handlers],
@ -89,9 +89,9 @@ tryStartAsyncMgr(undefined, _Window, _Sink) ->
tryStartAsyncMgr(Threshold, Window, Sink) ->
case Window of
undefined ->
supervisor:start_child(rumHWatcherSup, [Sink, rumBkdThrottle, [Threshold, erlang:trunc(Threshold * 0.2)]]);
supervisor:start_child(lgHWatcherSup, [Sink, lgBkdThrottle, [Threshold, erlang:trunc(Threshold * 0.2)]]);
_ ->
supervisor:start_child(rumHWatcherSup, [Sink, rumBkdThrottle, [Threshold, Window]])
supervisor:start_child(lgHWatcherSup, [Sink, lgBkdThrottle, [Threshold, Window]])
end,
ok.
@ -99,9 +99,9 @@ tryInstallKiller(undefined, _ReTime, _Sink) -> ok;
tryInstallKiller(HWM, ReTime, Sink) ->
case ReTime of
undefined ->
_ = supervisor:start_child(rumHWatcherSup, [Sink, rumMgrKiller, [HWM, 5000]]);
_ = supervisor:start_child(lgHWatcherSup, [Sink, lgMgrKiller, [HWM, 5000]]);
_ ->
_ = supervisor:start_child(rumHWatcherSup, [Sink, rumMgrKiller, [HWM, ReTime]])
_ = supervisor:start_child(lgHWatcherSup, [Sink, lgMgrKiller, [HWM, ReTime]])
end,
ok.
@ -109,7 +109,7 @@ tryStartHandlers(undefined, _Sink) -> ok;
tryStartHandlers(Handlers, Sink) ->
%% handler_watcher中处理
NewHandler = doStartHandlers(Handlers, Sink, [], []),
rumConfig:ptSet(handlers, rumConfig:ptGet(handlers, []) ++ NewHandler),
lgConfig:ptSet(handlers, lgConfig:ptGet(handlers, []) ++ NewHandler),
ok.
doStartHandlers([], _Sink, _NameAcc, HandlerAcc) ->
@ -118,7 +118,7 @@ doStartHandlers([OneHandler | Handlers], Sink, NameAcc, HandlerAcc) ->
{Module, Options} = parseHandlers(OneHandler),
NewNameAcc =
case Module of
{rumBkFile, F} ->
{lgBkFile, F} ->
case lists:member(F, NameAcc) of
true ->
error_logger:error_msg("Cannot have same file (~p) in multiple file backends~n", [F]),
@ -134,7 +134,7 @@ doStartHandlers([OneHandler | Handlers], Sink, NameAcc, HandlerAcc) ->
doStartHandlers(Handlers, Sink, NewNameAcc, [HandlerRet | HandlerAcc]).
startHandler(Sink, Module, Config) ->
{ok, Watcher} = supervisor:start_child(rumHWatcherSup, [Sink, Module, Config]),
{ok, Watcher} = supervisor:start_child(lgHWatcherSup, [Sink, Module, Config]),
{Module, Watcher, Sink}.
-spec tryStartErrLoggerHandler(boolean(), pos_integer(), list()) -> list().
@ -158,9 +158,9 @@ tryStartErrLoggerHandler(_ErrLoggerRedirect, HWM, WhiteList) ->
%% capture which handlers we removed from error_logger so we can restore them when lager stops
%% error_logger中删除的处理程序便lager停止时恢复它们
OldHandlers =
case supervisor:start_child(rumHWatcherSup, [error_logger, rumErrLoggerH, [HWM, rumUtil:get_env(errLoggerGLS, handle)]]) of
case supervisor:start_child(lgHWatcherSup, [error_logger, lgErrLoggerH, [HWM, lgUtil:get_env(errLoggerGLS, handle)]]) of
{ok, _} ->
[begin error_logger:delete_report_handler(X), X end || X <- gen_event:which_handlers(error_logger) -- [rumErrLoggerH | WhiteList]];
[begin error_logger:delete_report_handler(X), X end || X <- gen_event:which_handlers(error_logger) -- [lgErrLoggerH | WhiteList]];
{error, _} ->
[]
end,
@ -178,9 +178,9 @@ tryRemoveLoggerHandler() ->
parseHandlers([]) ->
[];
parseHandlers({rumBkdFile, Config}) ->
parseHandlers({lgBkdFile, Config}) ->
%% this is definitely a new-style config, no expansion needed
maybe_make_handler_id(rumBkdFile, Config);
maybe_make_handler_id(lgBkdFile, Config);
parseHandlers({Mod, Config}) ->
maybe_make_handler_id(Mod, Config).

src/eRum_sup.erl → src/eLog_sup.erl Ver ficheiro

@ -1,9 +1,9 @@
-module(eRum_sup).
-module(eLog_sup).
-behaviour(supervisor).
-include("eRum.hrl").
-include("rumDef.hrl").
-include("eLog.hrl").
-include("lgDef.hrl").
-export([
start_link/0
@ -35,8 +35,8 @@ start_link() ->
init(_Args) ->
%% set up the config, is safe even during relups
?eRumInit(),
%%runEvent作为默认值启动gen_event东西也许是一个用于处理接收器及其策略的新API
?eLogInit(),
%%lgEvent作为默认值启动gen_event东西也许是一个用于处理接收器及其策略的新API
SupFlags =
#{
strategy => one_for_one,
@ -44,43 +44,43 @@ init(_Args) ->
period => 60
},
RumEventSpec = #{
id => rumEvent,
start => {gen_emm, start_link, [{local, rumEvent}]},
LgEventSpec = #{
id => lgEvent,
start => {gen_emm, start_link, [{local, lgEvent}]},
restart => permanent,
shutdown => 5000,
type => worker,
modules => [dynamic]
},
RumHWatcherSupSpec = #{
id => rumHWatcherSup,
start => {rumHWatcherSup, start_link, []},
LgHWatcherSupSpec = #{
id => lgHWatcherSup,
start => {lgHWatcherSup, start_link, []},
restart => permanent,
shutdown => 5000,
type => supervisor,
modules => [rumHWatcherSup]
modules => [lgHWatcherSup]
},
ChildSpecs =
case rumUtil:get_env(crashLogFile, false) of
case lgUtil:get_env(crashLogFile, false) of
false ->
[RumEventSpec, RumHWatcherSupSpec];
[LgEventSpec, LgHWatcherSupSpec];
File ->
MsgMaxBytes = rumUtil:get_env(crashLogMsgSize, 65536),
RotationSize = rumUtil:get_env(crashLogFileSize, 0),
RotationCount = rumUtil:get_env(crashLogCount, 0),
RotationDate = rumUtil:get_env(crashLogDate, "$D0"),
RotationMod = rumUtil:get_env(crashLogRotator, ?RumDefRotateMod),
MsgMaxBytes = lgUtil:get_env(crashLogMsgSize, 65536),
RotationSize = lgUtil:get_env(crashLogFileSize, 0),
RotationCount = lgUtil:get_env(crashLogCount, 0),
RotationDate = lgUtil:get_env(crashLogDate, "$D0"),
RotationMod = lgUtil:get_env(crashLogRotator, ?LgDefRotateMod),
CrashLogSpec = #{
id => rumCrashLog,
start => {rumCrashLog, start_link, [File, MsgMaxBytes, RotationSize, RotationDate, RotationCount, RotationMod]},
id => lgCrashLog,
start => {lgCrashLog, start_link, [File, MsgMaxBytes, RotationSize, RotationDate, RotationCount, RotationMod]},
restart => permanent,
shutdown => 5000,
type => worker,
modules => [rumCrashLog]
modules => [lgCrashLog]
},
[RumEventSpec, RumHWatcherSupSpec, CrashLogSpec]
[LgEventSpec, LgHWatcherSupSpec, CrashLogSpec]
end,
{ok, {SupFlags, ChildSpecs}}.

src/errLogger/rumErrLoggerH.erl → src/errLogger/lgErrLoggerH.erl Ver ficheiro

@ -1,12 +1,12 @@
-module(rumErrLoggerH).
-module(lgErrLoggerH).
%% error_logger后端eRum
%% @see rumCrashLog
%% error_logger后端eLog
%% @see lgCrashLog
-behaviour(gen_event).
-include("rumDef.hrl").
-include("eRum.hrl").
-include("lgDef.hrl").
-include("eLog.hrl").
-compile(inline).
-compile({inline_size, 128}).
@ -29,24 +29,24 @@
-record(state, {
sink :: atom(),
shaper :: rumShaper(),
shaper :: lgShaper(),
%% group leader strategy
groupleader_strategy :: handle | ignore | mirror,
raw :: boolean()
}).
-define(LOGMSG(Sink, Level, Pid, Msg),
case ?RunShouldLog(Sink, Level) of
case ?LgShouldLog(Sink, Level) of
true ->
_ = eRum:log(Sink, Level, Pid, Msg, []),
_ = eLog:log(Sink, Level, Pid, Msg, []),
logged;
_ -> no_log
end).
-define(LOGFMT(Sink, Level, Pid, Fmt, Args),
case ?RunShouldLog(Sink, Level) of
case ?LgShouldLog(Sink, Level) of
true ->
_ = eRum:log(Sink, Level, Pid, Fmt, Args),
_ = eLog:log(Sink, Level, Pid, Fmt, Args),
logged;
_ -> no_log
end).
@ -54,10 +54,10 @@
-ifdef(TEST).
%% Make CRASH synchronous when testing, to avoid timing headaches
-define(CRASH_LOG(Event),
catch (gen_srv:call(rumCrashLog, {mWriteLog, Event}))).
catch (gen_srv:call(lgCrashLog, {mWriteLog, Event}))).
-else.
-define(CRASH_LOG(Event),
gen_srv:send(rumCrashLog, {mWriteLog, Event})).
gen_srv:send(lgCrashLog, {mWriteLog, Event})).
-endif.
setHighWater(N) ->
@ -65,22 +65,22 @@ setHighWater(N) ->
-spec init(any()) -> {ok, #state{}}.
init([HighWaterMark, GlStrategy]) ->
Flush = rumUtil:get_env(errLoggerFlushQueue, true),
FlushThr = rumUtil:get_env(errLoggerFlushThr, 20),
Shaper = #rumShaper{hwm = HighWaterMark, flushQueue = Flush, flushThr = FlushThr, filter = shaperFun(), id = ?MODULE},
Raw = rumUtil:get_env(errLoggerFormatRaw, false),
Flush = lgUtil:get_env(errLoggerFlushQueue, true),
FlushThr = lgUtil:get_env(errLoggerFlushThr, 20),
Shaper = #lgShaper{hwm = HighWaterMark, flushQueue = Flush, flushThr = FlushThr, filter = shaperFun(), id = ?MODULE},
Raw = lgUtil:get_env(errLoggerFormatRaw, false),
Sink = configSink(),
{ok, #state{sink = Sink, shaper = Shaper, groupleader_strategy = GlStrategy, raw = Raw}}.
handle_call({mSetHighWater, N}, #state{shaper = Shaper} = State) ->
NewShaper = Shaper#rumShaper{hwm = N},
NewShaper = Shaper#lgShaper{hwm = N},
{ok, ok, State#state{shaper = NewShaper}};
handle_call(_Request, State) ->
{ok, unknown_call, State}.
shaperFun() ->
SupSS = rumUtil:get_env(suppressSupStartStop, false),
AppSS = rumUtil:get_env(suppressAppStartStop, false),
SupSS = lgUtil:get_env(suppressSupStartStop, false),
AppSS = lgUtil:get_env(suppressAppStartStop, false),
if
SupSS andalso AppSS ->
fun suppress_supervisor_start_and_application_start/1;
@ -108,7 +108,7 @@ suppress_supervisor_start(_) ->
false.
handle_event(Event, #state{sink = Sink, shaper = Shaper} = State) ->
case rumUtil:checkHwm(Shaper, Event) of
case lgUtil:checkHwm(Shaper, Event) of
{true, _Drop, NewShaper} ->
evalGl(Event, State#state{shaper = NewShaper});
{drop, Drop, NewShaper} ->
@ -116,7 +116,7 @@ handle_event(Event, #state{sink = Sink, shaper = Shaper} = State) ->
true ->
{ok, State#state{shaper = NewShaper}};
_ ->
?LOGFMT(Sink, warning, self(), "lager_error_logger_h dropped ~p messages in the last second that exceeded the limit of ~p messages/sec", [Drop, NewShaper#rumShaper.hwm]),
?LOGFMT(Sink, warning, self(), "lager_error_logger_h dropped ~p messages in the last second that exceeded the limit of ~p messages/sec", [Drop, NewShaper#lgShaper.hwm]),
evalGl(Event, State#state{shaper = NewShaper})
end;
{false, _, NewShaper} ->
@ -124,13 +124,13 @@ handle_event(Event, #state{sink = Sink, shaper = Shaper} = State) ->
end.
handle_info({mShaperExpired, ?MODULE}, #state{sink = Sink, shaper = Shaper} = State) ->
case Shaper#rumShaper.dropped of
case Shaper#lgShaper.dropped of
0 ->
ignore;
Dropped ->
?LOGFMT(Sink, warning, self(), "lager_error_logger_h dropped ~p messages in the last second that exceeded the limit of ~p messages/sec", [Dropped, Shaper#rumShaper.hwm])
?LOGFMT(Sink, warning, self(), "lager_error_logger_h dropped ~p messages in the last second that exceeded the limit of ~p messages/sec", [Dropped, Shaper#lgShaper.hwm])
end,
{ok, State#state{shaper = Shaper#rumShaper{dropped = 0, mps = 0, lastTime = rumTime:now()}}};
{ok, State#state{shaper = Shaper#lgShaper{dropped = 0, mps = 0, lastTime = lgTime:now()}}};
handle_info(_Info, State) ->
{ok, State}.
@ -138,7 +138,7 @@ terminate(_Reason, _State) ->
ok.
code_change(_OldVsn, {state, Shaper, GLStrategy}, _Extra) ->
Raw = rumUtil:get_env(errLoggerFormatRaw, false),
Raw = lgUtil:get_env(errLoggerFormatRaw, false),
{ok, #state{
sink = configSink(),
shaper = Shaper,
@ -146,15 +146,15 @@ code_change(_OldVsn, {state, Shaper, GLStrategy}, _Extra) ->
raw = Raw
}};
code_change(_OldVsn, {state, Sink, Shaper, GLS}, _Extra) ->
Raw = rumUtil:get_env(errLoggerFormatRaw, false),
Raw = lgUtil:get_env(errLoggerFormatRaw, false),
{ok, #state{sink = Sink, shaper = Shaper, groupleader_strategy = GLS, raw = Raw}};
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
configSink() ->
case rumUtil:get_opt(?RumErrLogSink, rumUtil:get_env(extraSinks, []), undefined) of
undefined -> ?RumDefSink;
_ -> ?RumErrLogSink
case lgUtil:get_opt(?LgErrLogSink, lgUtil:get_env(extraSinks, []), undefined) of
undefined -> ?LgDefSink;
_ -> ?LgErrLogSink
end.
evalGl(Event, #state{groupleader_strategy = GlStrategy0} = State) ->
@ -330,7 +330,7 @@ logEvent(Event, #state{sink = Sink, raw = FormatRaw} = State) ->
Details = lists:sort(D),
case Details of
[{application, App}, {exited, Reason}, {type, _Type}] ->
case rumUtil:get_env(suppressAppStartStop, false) of
case lgUtil:get_env(suppressAppStartStop, false) of
true when Reason == stopped ->
no_log;
_ ->
@ -346,14 +346,14 @@ logEvent(Event, #state{sink = Sink, raw = FormatRaw} = State) ->
Details = lists:sort(D),
case Details of
[{application, App}, {started_at, Node}] ->
case rumUtil:get_env(suppressAppStartStop, false) of
case lgUtil:get_env(suppressAppStartStop, false) of
true ->
no_log;
_ ->
?LOGFMT(Sink, info, P, "Application ~w started on node ~w", [App, Node])
end;
[{started, Started}, {supervisor, Name}] ->
case rumUtil:get_env(suppressSupStartStop, false) of
case lgUtil:get_env(suppressSupStartStop, false) of
true ->
no_log;
_ ->
@ -373,7 +373,7 @@ logEvent(Event, #state{sink = Sink, raw = FormatRaw} = State) ->
{ok, State};
no_log ->
Shaper = State#state.shaper,
{ok, State#state{shaper = Shaper#rumShaper{mps = Shaper#rumShaper.mps - 1}}}
{ok, State#state{shaper = Shaper#lgShaper{mps = Shaper#lgShaper.mps - 1}}}
end.
formatCrashReport(Report, Neighbours) ->
@ -569,7 +569,7 @@ formatVal(Val) ->
eFmt:formatBin(<<"~p">>, [Val], [{charsLimit, 500}]).
printSillyList(L) ->
eFmt:formatBin(<<"~p">>, [L], [{charsLimit, ?RumDefTruncation}]).
eFmt:formatBin(<<"~p">>, [L], [{charsLimit, ?LgDefTruncation}]).
%% @doc Faster than proplists, but with the same API as long as you don't need to
%% handle bare atom keys

src/formatter/rumFormatTer.erl → src/formatter/lgFmtTer.erl Ver ficheiro

@ -1,6 +1,6 @@
-module(rumFormatTer).
-module(lgFmtTer).
-include("rumDef.hrl").
-include("lgDef.hrl").
-compile(inline).
-compile({inline_size, 128}).
@ -8,7 +8,7 @@
-export([
format/2
, format/3
, formatCfg/1
, fmtCfg/1
]).
%%
@ -19,7 +19,7 @@
%% elements in the configuration are printed verbatim. Atoms in the configuration are treated as metadata properties
%% and extracted from the log message. Optionally, a tuple of {atom(),semi-iolist()} can be used. The atom will look
%% up the property, but if not found it will use the semi-iolist() instead. These fallbacks can be similarly nested
%% or refer to other properties, if desired. You can also use a {atom, semi-iolist(), semi-iolist()} formatTer, which
%% or refer to other properties, if desired. You can also use a {atom, semi-iolist(), semi-iolist()} fmtTer, which
%% acts like a ternary operator's true/false branches.
%%
%% The metadata properties datetime, message, severity, pid, line, module, and function will always exist.
@ -28,7 +28,7 @@
%%
%%使{atomsemi-iolist}
%%使semi-iolist广
%%使{atomsemi-iolistsemi-iolist} formatTer
%%使{atomsemi-iolistsemi-iolist} fmtTer
%%true / false分支
%%
%%
@ -46,21 +46,21 @@
%% `[{pid, ["My pid is ", pid], ["Unknown Pid"]}]' -> if pid is in the metada print "My pid is ?.?.?", otherwise print "Unknown Pid"
%% @end
-spec format(rumMsg(), list()) -> any().
format(RumMsg, Config) ->
[output(V, RumMsg) || V <- Config].
-spec format(lgMsg(), list()) -> any().
format(LgMsg, Config) ->
[output(V, LgMsg) || V <- Config].
format(RumMsg, Config, Colors) ->
format(LgMsg, Config, Colors) ->
[
case V of
color -> outColor(Colors, RumMsg);
_ -> output(V, RumMsg)
color -> outColor(Colors, LgMsg);
_ -> output(V, LgMsg)
end || V <- Config
].
formatCfg([]) ->
fmtCfg([]) ->
[datetime, color, <<"[">>, severity, <<"]">>, node, <<"|">>, pid, <<"|">>, module, <<"|">>, function, <<"|">>, line, <<"|">>, message, <<"\n">>];
formatCfg(MetaWhitelist) ->
fmtCfg(MetaWhitelist) ->
[datetime, color, <<"[">>, severity, <<"]">>, node, <<"|">>, pid, <<"|">>, module, <<"|">>, function, <<"|">>, line, <<"|">>] ++
[{M, [atom_to_binary(M), <<"=">>, M, "|"], [<<>>]} || M <- MetaWhitelist] ++ [message, <<"\n">>].
@ -68,78 +68,78 @@ formatCfg(MetaWhitelist) ->
-define(FixMd, [pid, node, module, function, line]).
-spec output(term(), rumMsg()) -> iolist().
output(message, RumMsg) -> RumMsg#rumMsg.message;
output(datetime, RumMsg) -> RumMsg#rumMsg.datetime;
output(pid, RumMsg) -> RumMsg#rumMsg.pid;
output(node, RumMsg) -> RumMsg#rumMsg.node;
output(datetime, RumMsg) -> RumMsg#rumMsg.datetime;
output(module, RumMsg) -> atom_to_binary(RumMsg#rumMsg.module, utf8);
output(function, RumMsg) -> atom_to_binary(RumMsg#rumMsg.function, utf8);
output(line, RumMsg) -> integer_to_binary(RumMsg#rumMsg.line);
output(severity, RumMsg) -> loSeverity(RumMsg#rumMsg.severity);
output(upSeverity, RumMsg) -> upSeverity(RumMsg#rumMsg.severity);
output(blank, _RumMsg) -> <<" ">>;
output(node, RumMsg) -> atom_to_binary(RumMsg#rumMsg.node, utf8);
output(sev, RumMsg) ->
sevSeverity(RumMsg#rumMsg.severity); %% Write brief acronym for the severity level (e.g. debug -> $D)
output(metadata, RumMsg) -> mdJoin(RumMsg#rumMsg.metadata, <<"|">>, <<>>);
output({blank, Fill}, _RumMsg) -> Fill;
output({metadata, IntSep, FieldSep}, RumMsg) ->
MD = lists:keysort(1, RumMsg#rumMsg.metadata), mdJoin(MD, IntSep, FieldSep, <<>>);
output({pterm, Key}, _RumMsg) ->
-spec output(term(), lgMsg()) -> iolist().
output(message, LgMsg) -> LgMsg#lgMsg.message;
output(datetime, LgMsg) -> LgMsg#lgMsg.datetime;
output(pid, LgMsg) -> LgMsg#lgMsg.pid;
output(node, LgMsg) -> LgMsg#lgMsg.node;
output(datetime, LgMsg) -> LgMsg#lgMsg.datetime;
output(module, LgMsg) -> atom_to_binary(LgMsg#lgMsg.module, utf8);
output(function, LgMsg) -> atom_to_binary(LgMsg#lgMsg.function, utf8);
output(line, LgMsg) -> integer_to_binary(LgMsg#lgMsg.line);
output(severity, LgMsg) -> loSeverity(LgMsg#lgMsg.severity);
output(upSeverity, LgMsg) -> upSeverity(LgMsg#lgMsg.severity);
output(blank, _LgMsg) -> <<" ">>;
output(node, LgMsg) -> atom_to_binary(LgMsg#lgMsg.node, utf8);
output(sev, LgMsg) ->
sevSeverity(LgMsg#lgMsg.severity); %% Write brief acronym for the severity level (e.g. debug -> $D)
output(metadata, LgMsg) -> mdJoin(LgMsg#lgMsg.metadata, <<"|">>, <<>>);
output({blank, Fill}, _LgMsg) -> Fill;
output({metadata, IntSep, FieldSep}, LgMsg) ->
MD = lists:keysort(1, LgMsg#lgMsg.metadata), mdJoin(MD, IntSep, FieldSep, <<>>);
output({pterm, Key}, _LgMsg) ->
makeStr(getPTerm(Key, <<"">>));
output({pterm, Key, Default}, _RumMsg) ->
output({pterm, Key, Default}, _LgMsg) ->
makeStr(getPTerm(Key, Default));
output(Prop, RumMsg) when is_atom(Prop) ->
makeStr(getMdKey(Prop, RumMsg, <<"Undefined">>));
output({Prop, Default}, RumMsg) when is_atom(Prop) ->
makeStr(getMdKey(Prop, RumMsg, output(Default, RumMsg)));
output({Prop, Present, Absent}, RumMsg) when is_atom(Prop) ->
case getMdKey(Prop, RumMsg) of
output(Prop, LgMsg) when is_atom(Prop) ->
makeStr(getMdKey(Prop, LgMsg, <<"Undefined">>));
output({Prop, Default}, LgMsg) when is_atom(Prop) ->
makeStr(getMdKey(Prop, LgMsg, output(Default, LgMsg)));
output({Prop, Present, Absent}, LgMsg) when is_atom(Prop) ->
case getMdKey(Prop, LgMsg) of
undefined ->
[output(V, RumMsg) || V <- Absent];
[output(V, LgMsg) || V <- Absent];
_ ->
[output(V, RumMsg) || V <- Present]
[output(V, LgMsg) || V <- Present]
end;
output({Prop, Present, Absent, Width}, RumMsg) when is_atom(Prop) ->
output({Prop, Present, Absent, Width}, LgMsg) when is_atom(Prop) ->
%% sort of like a poor man's ternary operator
case getMdKey(Prop, RumMsg) of
case getMdKey(Prop, LgMsg) of
undefined ->
[output(V, RumMsg, Width) || V <- Absent];
[output(V, LgMsg, Width) || V <- Absent];
_ ->
[output(V, RumMsg, Width) || V <- Present]
[output(V, LgMsg, Width) || V <- Present]
end;
output(Other, _) -> makeStr(Other).
output(message, RumMsg, _Width) -> RumMsg#rumMsg.message;
output(datetime, RumMsg, _Width) -> RumMsg#rumMsg.datetime;
output(pid, RumMsg, _Width) -> RumMsg#rumMsg.pid;
output(node, RumMsg, _Width) -> RumMsg#rumMsg.node;
output(module, RumMsg, _Width) -> atom_to_binary(RumMsg#rumMsg.module, utf8);
output(function, RumMsg, _Width) -> atom_to_binary(RumMsg#rumMsg.function, utf8);
output(line, RumMsg, _Width) -> integer_to_binary(RumMsg#rumMsg.line);
output(severity, RumMsg, _Width) -> loSeverity(RumMsg#rumMsg.severity);
output(upSeverity, RumMsg, _Width) -> upSeverity(RumMsg#rumMsg.severity);
output(blank, _RumMsg, _Width) -> <<" ">>;
output(node, RumMsg, _Width) -> atom_to_binary(RumMsg#rumMsg.node, utf8);
output(sev, RumMsg, _Width) ->
sevSeverity(RumMsg#rumMsg.severity); %% Write brief acronym for the severity level (e.g. debug -> $D)
output({blank, Fill}, _RumMsg, _Width) -> Fill;
output(metadata, RumMsg, _Width) -> mdJoin(RumMsg#rumMsg.metadata, <<"|">>, <<>>);
output({metadata, IntSep, FieldSep}, RumMsg, _Width) ->
MD = lists:keysort(1, RumMsg#rumMsg.metadata), mdJoin(MD, IntSep, FieldSep, <<>>);
output({pterm, Key}, _RumMsg, _Width) -> makeStr(getPTerm(Key, <<"">>));
output({pterm, Key, Default}, _RumMsg, _Width) -> makeStr(getPTerm(Key, Default));
output(Prop, RumMsg, Width) when is_atom(Prop) ->
makeStr(getMdKey(Prop, RumMsg, <<"Undefined">>), Width);
output({Prop, Default}, RumMsg, Width) when is_atom(Prop) ->
makeStr(getMdKey(Prop, RumMsg, output(Default, RumMsg)), Width);
output(message, LgMsg, _Width) -> LgMsg#lgMsg.message;
output(datetime, LgMsg, _Width) -> LgMsg#lgMsg.datetime;
output(pid, LgMsg, _Width) -> LgMsg#lgMsg.pid;
output(node, LgMsg, _Width) -> LgMsg#lgMsg.node;
output(module, LgMsg, _Width) -> atom_to_binary(LgMsg#lgMsg.module, utf8);
output(function, LgMsg, _Width) -> atom_to_binary(LgMsg#lgMsg.function, utf8);
output(line, LgMsg, _Width) -> integer_to_binary(LgMsg#lgMsg.line);
output(severity, LgMsg, _Width) -> loSeverity(LgMsg#lgMsg.severity);
output(upSeverity, LgMsg, _Width) -> upSeverity(LgMsg#lgMsg.severity);
output(blank, _LgMsg, _Width) -> <<" ">>;
output(node, LgMsg, _Width) -> atom_to_binary(LgMsg#lgMsg.node, utf8);
output(sev, LgMsg, _Width) ->
sevSeverity(LgMsg#lgMsg.severity); %% Write brief acronym for the severity level (e.g. debug -> $D)
output({blank, Fill}, _LgMsg, _Width) -> Fill;
output(metadata, LgMsg, _Width) -> mdJoin(LgMsg#lgMsg.metadata, <<"|">>, <<>>);
output({metadata, IntSep, FieldSep}, LgMsg, _Width) ->
MD = lists:keysort(1, LgMsg#lgMsg.metadata), mdJoin(MD, IntSep, FieldSep, <<>>);
output({pterm, Key}, _LgMsg, _Width) -> makeStr(getPTerm(Key, <<"">>));
output({pterm, Key, Default}, _LgMsg, _Width) -> makeStr(getPTerm(Key, Default));
output(Prop, LgMsg, Width) when is_atom(Prop) ->
makeStr(getMdKey(Prop, LgMsg, <<"Undefined">>), Width);
output({Prop, Default}, LgMsg, Width) when is_atom(Prop) ->
makeStr(getMdKey(Prop, LgMsg, output(Default, LgMsg)), Width);
output(Other, _, Width) -> makeStr(Other, Width).
outColor([], _RumMsg) -> <<>>;
outColor(Colors, RumMsg) ->
case lists:keyfind(RumMsg#rumMsg.severity, 1, Colors) of
outColor([], _LgMsg) -> <<>>;
outColor(Colors, LgMsg) ->
case lists:keyfind(LgMsg#lgMsg.severity, 1, Colors) of
{_, Color} -> Color;
_ -> <<>>
end.
@ -174,15 +174,15 @@ makeStr(_, Str, W) ->
getPTerm(Key, Default) ->
persistent_term:get(Key, Default).
getMdKey(Key, RumMsg) ->
getMdKey(Key, RumMsg, undefined).
getMdKey(Key, LgMsg) ->
getMdKey(Key, LgMsg, undefined).
getMdKey(Key, RumMsg, Default) ->
case lists:keyfind(Key, 1, RumMsg#rumMsg.metadata) of
getMdKey(Key, LgMsg, Default) ->
case lists:keyfind(Key, 1, LgMsg#lgMsg.metadata) of
false ->
case lists:member(Key, ?FixMd) of
true ->
output(Key, RumMsg);
output(Key, LgMsg);
_ ->
Default
end;

src/mgrKiller/rumMgrKiller.erl → src/mgrKiller/lgMgrKiller.erl Ver ficheiro

@ -1,8 +1,8 @@
-module(rumMgrKiller).
-module(lgMgrKiller).
-behavior(gen_emm).
-include("rumDef.hrl").
-include("lgDef.hrl").
-compile(inline).
-compile({inline_size, 128}).
@ -24,7 +24,7 @@
}).
kill_me() ->
gen_emm:call(rumEvent, ?MODULE, mKillSelf).
gen_emm:call(lgEvent, ?MODULE, mKillSelf).
init([KillerHWM, KillerReinstallAfter]) ->
{ok, #state{killerHwm = KillerHWM, killerReTime = KillerReinstallAfter}}.

src/rotator/rumRotatorExm.erl → src/rotator/lgRotatorExm.erl Ver ficheiro

@ -1,4 +1,4 @@
-module(rumRotatorExm).
-module(lgRotatorExm).
%% Create a log file
-callback createLogFile(Name :: list(), Buffer :: {integer(), integer()} | any()) ->

src/rotator/rumRotatorIns.erl → src/rotator/lgRotatorIns.erl Ver ficheiro

@ -1,6 +1,6 @@
-module(rumRotatorIns).
-module(lgRotatorIns).
-behaviour(rumRotatorExm).
-behaviour(lgRotatorExm).
-include_lib("kernel/include/file.hrl").
@ -46,7 +46,7 @@ ensureLogFile(FileName, Fd, Inode, CTime, Buffer) ->
undefined ->
openLogFile(FileName, Buffer);
_ ->
case rumUtil:isFileChanged(FileName, Inode, CTime) of
case lgUtil:isFileChanged(FileName, Inode, CTime) of
{true, _FInfo} ->
reopenLogFile(FileName, Fd, Buffer);
{_, FInfo} ->

+ 0
- 57
src/test.E Ver ficheiro

@ -1,57 +0,0 @@
-file("test.erl", 1).
-module(test).
-file("d:/gitClone/eRum/src/../include/eRum.hrl", 1).
-file("d:/gitClone/eRum/src/../include/rumCom.hrl", 1).
-file("d:/gitClone/eRum/src/../include/eRum.hrl", 1).
-file("test.erl", 2).
-compile(export_all).
test1() ->
case eRumCfg:get(rumEvent) band 128 /= 0 of
true ->
eRum:do_log_impl(128,
self(),
node(),
test, test1, 7,
eRum:md(),
"IMY***************11",
undefined, 128, 4096, rumEvent, safe);
_ ->
ok
end,
11111111111111111111111111111111,
case eRumCfg:get(rumEvent) band 128 /= 0 of
true ->
eRum:do_log_impl(128,
self(),
node(),
test, test1, 9,
eRum:md(),
"IMY***************",
[], 128, 4096, rumEvent, safe);
_ ->
ok
end,
2222222222222222222222222222,
case eRumCfg:get(rumEvent) band 128 /= 0 of
true ->
eRum:do_log_impl(128,
self(),
node(),
test, test1, 11,
eRum:md(),
"IMY***************~p",
[1],
128, 4096, rumEvent, safe);
_ ->
ok
end.

+ 0
- 13
src/test.erl1 Ver ficheiro

@ -1,13 +0,0 @@
-module(test).
-include("eRum.hrl").
-compile(export_all).
test1() ->
?rumDebug("IMY***************11"),
11111111111111111111111111111111,
?rumDebug("IMY***************", []),
2222222222222222222222222222,
?rumDebug("IMY***************~p", [1]).

+ 20
- 0
src/utils/lgConfig.erl Ver ficheiro

@ -0,0 +1,20 @@
-module(lgConfig).
-include("lgDef.hrl").
-include("lgCom.hrl").
-compile(inline).
-compile({inline_size, 128}).
-export([
ptGet/2
, ptSet/2
]).
ptGet(Key, Default) ->
persistent_term:get({?eLogPtTl, Key}, Default).
ptSet(Key, Value) ->
persistent_term:put({?eLogPtTl, Key}, Value).

src/utils/rumKvsToBeam.erl → src/utils/lgKvsToBeam.erl Ver ficheiro

@ -1,4 +1,4 @@
-module(rumKvsToBeam).
-module(lgKvsToBeam).
-export([
load/2

src/utils/rumTime.erl → src/utils/lgTime.erl Ver ficheiro

@ -1,5 +1,5 @@
-module(rumTime).
-include("rumTime.hrl").
-module(lgTime).
-include("lgTime.hrl").
-compile(inline).
-compile({inline_size, 128}).

src/utils/rumUtil.erl → src/utils/lgUtil.erl Ver ficheiro

@ -1,7 +1,7 @@
-module(rumUtil).
-module(lgUtil).
-include("rumCom.hrl").
-include("rumDef.hrl").
-include("lgCom.hrl").
-include("lgDef.hrl").
-include_lib("kernel/include/file.hrl").
-compile(inline).
@ -73,9 +73,9 @@ levelToChr(alert) -> $A;
levelToChr(emergency) -> $M;
levelToChr(none) -> $ .
-spec validateLogLevel(atom()|string()) -> false | rumMaskLevel().
-spec validateLogLevel(atom()|string()) -> false | lgMaskLevel().
validateLogLevel(Level) ->
try rumUtil:configToMask(Level) of
try lgUtil:configToMask(Level) of
Levels ->
Levels
catch
@ -83,20 +83,20 @@ validateLogLevel(Level) ->
false
end.
-spec configToMask(atom()|string()) -> rumMaskLevel().
-spec configToMask(atom()|string()) -> lgMaskLevel().
configToMask(Conf) ->
Levels = atomCfgToLevels(Conf),
levelsToMask(Levels, 0).
-spec levelsToMask([rumAtomLevel()], rumMaskLevel()) -> rumMaskLevel().
-spec levelsToMask([lgAtomLevel()], lgMaskLevel()) -> lgMaskLevel().
levelsToMask([], Acc) ->
Acc;
levelsToMask([Level | Left], Acc) ->
levelsToMask(Left, levelToNum(Level) bor Acc).
-spec maskToLevels(rumMaskLevel()) -> [rumAtomLevel()].
-spec maskToLevels(lgMaskLevel()) -> [lgAtomLevel()].
maskToLevels(Mask) ->
maskToLevels(?RumLevels, Mask, []).
maskToLevels(?LgLevels, Mask, []).
maskToLevels([], _Mask, Acc) ->
lists:reverse(Acc);
@ -108,26 +108,26 @@ maskToLevels([Level | Levels], Mask, Acc) ->
maskToLevels(Levels, Mask, Acc)
end.
-spec atomCfgToLevels(atom()) -> [rumAtomLevel()].
-spec atomCfgToLevels(atom()) -> [lgAtomLevel()].
atomCfgToLevels(Cfg) ->
binCfgToLevels(atom_to_binary(Cfg, utf8)).
binCfgToLevels(<<"!", Rest/binary>>) ->
?RumLevels -- binCfgToLevels(Rest);
?LgLevels -- binCfgToLevels(Rest);
binCfgToLevels(<<"=<", Rest/binary>>) ->
riseInWhile(?RumLevels, levelBinToAtom(Rest), []);
riseInWhile(?LgLevels, levelBinToAtom(Rest), []);
binCfgToLevels(<<"<=", Rest/binary>>) ->
riseInWhile(?RumLevels, levelBinToAtom(Rest), []);
riseInWhile(?LgLevels, levelBinToAtom(Rest), []);
binCfgToLevels(<<">=", Rest/binary>>) ->
dropInWhile(?RumLevels, levelBinToAtom(Rest));
dropInWhile(?LgLevels, levelBinToAtom(Rest));
binCfgToLevels(<<"=>", Rest/binary>>) ->
dropInWhile(?RumLevels, levelBinToAtom(Rest));
dropInWhile(?LgLevels, levelBinToAtom(Rest));
binCfgToLevels(<<"=", Rest/binary>>) ->
[levelBinToAtom(Rest)];
binCfgToLevels(<<"<", Rest/binary>>) ->
riseOutWhile(?RumLevels, levelBinToAtom(Rest), []);
riseOutWhile(?LgLevels, levelBinToAtom(Rest), []);
binCfgToLevels(<<">", Rest/binary>>) ->
dropOutWhile(?RumLevels, levelBinToAtom(Rest));
dropOutWhile(?LgLevels, levelBinToAtom(Rest));
binCfgToLevels(Rest) ->
[levelBinToAtom(Rest)].
@ -173,7 +173,7 @@ riseOutWhile([CurLevel | Left], Level, Acc) ->
levelBinToAtom(BinStr) ->
AtomLevel = binary_to_atom(BinStr, utf8),
case lists:member(AtomLevel, ?RumLevels) of
case lists:member(AtomLevel, ?LgLevels) of
true ->
AtomLevel;
_ ->
@ -260,12 +260,12 @@ parseRotateSpec(Spec) ->
calcNextRotateMs(Spec) ->
{Date, Time} = NowDataTime = erlang:localtime(),
NextTime = calcNextRotate(Spec, Date, Time),
(rumTime:lDateTimeToSec(NextTime) - rumTime:lDateTimeToSec(NowDataTime)) * 1000.
(lgTime:lDateTimeToSec(NextTime) - lgTime:lDateTimeToSec(NowDataTime)) * 1000.
calcNextRotateMs(Spec, NowDataTime) ->
{Date, Time} = NowDataTime,
NextTime = calcNextRotate(Spec, Date, Time),
(rumTime:lDateTimeToSec(NextTime) - rumTime:lDateTimeToSec(NowDataTime)) * 1000.
(lgTime:lDateTimeToSec(NextTime) - lgTime:lDateTimeToSec(NowDataTime)) * 1000.
calcNextRotateDt(Spec, NowDataTime) ->
{Date, Time} = NowDataTime,
@ -281,8 +281,8 @@ calcNextRotate({undefined, SHour, SMinute, _SMonthV}, CurDate, CurTime) ->
{CurDate, {CurHour, SMinute, 0}};
_ ->
%% rotation is next hour
NexSec = rumTime:lDateTimeToSec({CurDate, {CurHour, SMinute, 0}}) + 3600,
rumTime:secToLDateTime(NexSec)
NexSec = lgTime:lDateTimeToSec({CurDate, {CurHour, SMinute, 0}}) + 3600,
lgTime:secToLDateTime(NexSec)
end;
_ ->
case CurTime < {SHour, SMinute, 0} of
@ -291,23 +291,23 @@ calcNextRotate({undefined, SHour, SMinute, _SMonthV}, CurDate, CurTime) ->
{CurDate, {SHour, SMinute, 0}};
_ ->
%% rotation is next day
NexSec = rumTime:lDateTimeToSec({CurDate, {SHour, SMinute, 0}}) + 86400,
rumTime:secToLDateTime(NexSec)
NexSec = lgTime:lDateTimeToSec({CurDate, {SHour, SMinute, 0}}) + 86400,
lgTime:secToLDateTime(NexSec)
end
end;
calcNextRotate({day, SHour, SMinute, SDay}, CurDate, CurTime) ->
CurWeekDay = rumTime:weekDay(CurDate),
CurWeekDay = lgTime:weekDay(CurDate),
if
CurWeekDay < SDay ->
%% rotation is this week
DiffDays = SDay - CurWeekDay,
NexSec = rumTime:lDateTimeToSec({CurDate, {SHour, SMinute, 0}}) + (86400 * DiffDays),
rumTime:secToLDateTime(NexSec);
NexSec = lgTime:lDateTimeToSec({CurDate, {SHour, SMinute, 0}}) + (86400 * DiffDays),
lgTime:secToLDateTime(NexSec);
CurWeekDay > SDay ->
%% rotation is next week
DiffDays = ((7 - CurWeekDay) + SDay),
NexSec = rumTime:lDateTimeToSec({CurDate, {SHour, SMinute, 0}}) + (86400 * DiffDays),
rumTime:secToLDateTime(NexSec);
NexSec = lgTime:lDateTimeToSec({CurDate, {SHour, SMinute, 0}}) + (86400 * DiffDays),
lgTime:secToLDateTime(NexSec);
true ->
case CurTime < {SHour, SMinute, 0} of
true ->
@ -315,13 +315,13 @@ calcNextRotate({day, SHour, SMinute, SDay}, CurDate, CurTime) ->
{CurDate, {SHour, SMinute, 0}};
_ ->
%% rotation is next week
NexSec = rumTime:lDateTimeToSec({CurDate, {SHour, SMinute, 0}}) + (86400 * 7),
rumTime:secToLDateTime(NexSec)
NexSec = lgTime:lDateTimeToSec({CurDate, {SHour, SMinute, 0}}) + (86400 * 7),
lgTime:secToLDateTime(NexSec)
end
end;
calcNextRotate({last, SHour, SMinute, _SMonthV}, CurDate, CurTime) ->
{CurYear, CurMonth, CurDay} = CurDate,
CurMonthDay = rumTime:monthDay(CurYear, CurMonth),
CurMonthDay = lgTime:monthDay(CurYear, CurMonth),
case CurMonthDay == CurDay of
true ->
case CurTime < {SHour, SMinute, 0} of
@ -330,10 +330,10 @@ calcNextRotate({last, SHour, SMinute, _SMonthV}, CurDate, CurTime) ->
{CurDate, {SHour, SMinute, 0}};
_ ->
%% rotation is next last month day
NexSec = rumTime:lDateTimeToSec({CurDate, {23, 59, 59}}) + 1, %% 1
{NewNDate, _NewNTime} = rumTime:secToLDateTime(NexSec),
NexSec = lgTime:lDateTimeToSec({CurDate, {23, 59, 59}}) + 1, %% 1
{NewNDate, _NewNTime} = lgTime:secToLDateTime(NexSec),
{NewNYear, NewNMonth, _} = NewNDate,
NewMonthDay = rumTime:monthDay(NewNYear, NewNMonth),
NewMonthDay = lgTime:monthDay(NewNYear, NewNMonth),
{{NewNYear, NewNMonth, NewMonthDay}, {SHour, SMinute, 0}}
end;
_ ->
@ -348,9 +348,9 @@ calcNextRotate({date, SHour, SMinute, SDate}, CurDate, CurTime) ->
{{CurYear, CurMonth, SDate}, {SHour, SMinute, 0}};
CurDay > SDate ->
%% rotation is next month day
CurMonthDay = rumTime:monthDay(CurYear, CurMonth),
NexSec = rumTime:lDateTimeToSec({{CurYear, CurMonth, CurMonthDay}, {23, 59, 59}}) + 1,
{NewNDate, _NewNTime} = rumTime:secToLDateTime(NexSec),
CurMonthDay = lgTime:monthDay(CurYear, CurMonth),
NexSec = lgTime:lDateTimeToSec({{CurYear, CurMonth, CurMonthDay}, {23, 59, 59}}) + 1,
{NewNDate, _NewNTime} = lgTime:secToLDateTime(NexSec),
{NewNYear, NewNMonth, _} = NewNDate,
{{NewNYear, NewNMonth, SDate}, {SHour, SMinute, 0}};
true ->
@ -360,9 +360,9 @@ calcNextRotate({date, SHour, SMinute, SDate}, CurDate, CurTime) ->
{CurDate, {SHour, SMinute, 0}};
_ ->
%% rotation is next month day
CurMonthDay = rumTime:monthDay(CurYear, CurMonth),
NexSec = rumTime:lDateTimeToSec({{CurYear, CurMonth, CurMonthDay}, {23, 59, 59}}) + 1,
{NewNDate, _NewNTime} = rumTime:secToLDateTime(NexSec),
CurMonthDay = lgTime:monthDay(CurYear, CurMonth),
NexSec = lgTime:lDateTimeToSec({{CurYear, CurMonth, CurMonthDay}, {23, 59, 59}}) + 1,
{NewNDate, _NewNTime} = lgTime:secToLDateTime(NexSec),
{NewNYear, NewNMonth, _} = NewNDate,
{{NewNYear, NewNMonth, SDate}, {SHour, SMinute, 0}}
end
@ -370,7 +370,7 @@ calcNextRotate({date, SHour, SMinute, SDate}, CurDate, CurTime) ->
-spec trace_filter(Query :: 'none' | [tuple()]) -> {ok, any()}.
trace_filter(Query) ->
trace_filter(?RumDefTracer, Query).
trace_filter(?LgDefTracer, Query).
%% TODO: Support multiple trace modules
%-spec trace_filter(Module :: atom(), Query :: 'none' | [tuple()]) -> {ok, any()}.
@ -469,7 +469,7 @@ check_trace(Attrs, {Filter, _Level, Dest}) when is_list(Filter) ->
check_trace(Attrs, {Filter, _Level, Dest}) when is_tuple(Filter) ->
Made = gre:make(Attrs, [list]),
glc:handle(?RumDefTracer, Made),
glc:handle(?LgDefTracer, Made),
Match = glc_lib:matches(Filter, Made),
case Match of
true ->
@ -478,14 +478,14 @@ check_trace(Attrs, {Filter, _Level, Dest}) when is_tuple(Filter) ->
[]
end.
-spec isLoggAble(rumMsg(), rumMaskLevel(), term()) -> boolean().
isLoggAble(RumMsg, Mask, MyName) ->
#rumMsg{severity = Severity, destinations = Destinations} = RumMsg,
-spec isLoggAble(lgMsg(), lgMaskLevel(), term()) -> boolean().
isLoggAble(LgMsg, Mask, MyName) ->
#lgMsg{severity = Severity, destinations = Destinations} = LgMsg,
(Severity band Mask) /= 0 orelse lists:member(MyName, Destinations).
parsePath(RelPath) ->
NewRelPath =
case rumUtil:get_env(logRoot, undefined) of
case lgUtil:get_env(logRoot, undefined) of
undefined ->
RelPath;
LogRoot ->
@ -504,9 +504,9 @@ parsePath(RelPath) ->
%% "logRoot"), but the file paths inside Handlers are not.
find_file(_File1, _Handlers = []) ->
false;
find_file(File1, [{{rumBkdFile, File2}, _Handler, _Sink} = HandlerInfo | Handlers]) ->
find_file(File1, [{{lgBkdFile, File2}, _Handler, _Sink} = HandlerInfo | Handlers]) ->
File1Abs = File1,
File2Abs = rumUtil:parsePath(File2),
File2Abs = lgUtil:parsePath(File2),
case File1Abs =:= File2Abs of
true ->
% The file inside HandlerInfo is the same as the file we are looking
@ -519,7 +519,7 @@ find_file(File1, [_HandlerInfo | Handlers]) ->
find_file(File1, Handlers).
%% conditionally check the HWM if the event would not have been filtered
checkHwm(Shaper = #rumShaper{filter = Filter}, Event) ->
checkHwm(Shaper = #lgShaper{filter = Filter}, Event) ->
case Filter(Event) of
true ->
{true, 0, Shaper};
@ -528,22 +528,22 @@ checkHwm(Shaper = #rumShaper{filter = Filter}, Event) ->
end.
%% S i.e.
checkHwm(#rumShaper{id = Id, hwm = Hwm, mps = Mps, lastTime = LastTime, dropped = Drop, flushQueue = FlushQueue, flushThr = FlushThr, timer = Timer, filter = Filter} = Shaper) ->
checkHwm(#lgShaper{id = Id, hwm = Hwm, mps = Mps, lastTime = LastTime, dropped = Drop, flushQueue = FlushQueue, flushThr = FlushThr, timer = Timer, filter = Filter} = Shaper) ->
if
Hwm == undefined ->
{true, 0, Shaper};
Mps < Hwm ->
NowTime = rumTime:now(),
NowTime = lgTime:now(),
case LastTime == NowTime of
true ->
{true, 0, Shaper#rumShaper{mps = Mps + 1}};
{true, 0, Shaper#lgShaper{mps = Mps + 1}};
_ ->
%different second - reset mps
{true, 0, Shaper#rumShaper{dropped = 0, mps = 1, lastTime = NowTime}}
{true, 0, Shaper#lgShaper{dropped = 0, mps = 1, lastTime = NowTime}}
end;
true ->
%% are we still in the same second?
NowTimeMs = rumTime:nowMs(),
NowTimeMs = lgTime:nowMs(),
NowTime = NowTimeMs div 1000,
PastMs = NowTimeMs rem 1000,
case LastTime == NowTime of
@ -551,11 +551,11 @@ checkHwm(#rumShaper{id = Id, hwm = Hwm, mps = Mps, lastTime = LastTime, dropped
%% still in same second, but have exceeded the high water mark
NewDrops = ?IIF(isNeedFlush(FlushQueue, FlushThr), dropMsg(NowTime, Filter, 0), 0),
NewTimer = ?IIF(erlang:read_timer(Timer) =/= false, Timer, erlang:send_after(1000 - PastMs, self(), {mShaperExpired, Id})),
{false, 0, Shaper#rumShaper{dropped = Drop + NewDrops + 1, timer = NewTimer}};
{false, 0, Shaper#lgShaper{dropped = Drop + NewDrops + 1, timer = NewTimer}};
_ ->
_ = erlang:cancel_timer(Shaper#rumShaper.timer),
_ = erlang:cancel_timer(Shaper#lgShaper.timer),
%% different second, reset all counters and allow it
{drop, Drop, Shaper#rumShaper{dropped = 0, mps = 1, lastTime = NowTime}}
{drop, Drop, Shaper#lgShaper{dropped = 0, mps = 1, lastTime = NowTime}}
end
end.
@ -571,7 +571,7 @@ isNeedFlush(_FlushQueue, _FlushThreshold) ->
false.
dropMsg(LastTime, Filter, Count) ->
CurTime = rumTime:now(),
CurTime = lgTime:now(),
case CurTime == LastTime of
true ->
receive
@ -611,7 +611,7 @@ isFileChanged(FileName, Inode, Ctime) ->
-spec get_env(Par :: atom(), Def :: term()) -> Val :: term().
get_env(Key, Def) ->
case application:get_env(?RumAppName, Key) of
case application:get_env(?LgAppName, Key) of
{ok, Val} ->
Val;
_ ->

+ 0
- 20
src/utils/rumConfig.erl Ver ficheiro

@ -1,20 +0,0 @@
-module(rumConfig).
-include("rumDef.hrl").
-include("rumCom.hrl").
-compile(inline).
-compile({inline_size, 128}).
-export([
ptGet/2
, ptSet/2
]).
ptGet(Key, Default) ->
persistent_term:get({?eRumPtTl, Key}, Default).
ptSet(Key, Value) ->
persistent_term:put({?eRumPtTl, Key}, Value).

src/watcher/rumHWatcherSrv.erl → src/watcher/lgHWatcherSrv.erl Ver ficheiro

@ -1,8 +1,8 @@
-module(rumHWatcherSrv).
-module(lgHWatcherSrv).
-behaviour(gen_srv).
-include("rumDef.hrl").
-include("lgDef.hrl").
-export([
start/3
@ -61,7 +61,7 @@ handleInfo({gen_event_EXIT, Module, {'EXIT', {kill_me, [_KillerHWM, KillerReinst
_ = timer:apply_after(KillerReinstallAfter, lager_app, start_handler, [Sink, Module, Config]),
{stop, normal, State};
handleInfo({gen_event_EXIT, Module, Reason}, #state{module = Module, config = Config, sink = Sink} = State) ->
case eRum:log(error, self(), "Lager event handler ~p exited with reason ~s", [Module, rumErrLoggerH:formatReason(Reason)]) of
case eLog:log(error, self(), "Lager event handler ~p exited with reason ~s", [Module, lgErrLoggerH:formatReason(Reason)]) of
ok ->
installHandler(Module, Config, Sink);
{error, _} ->
@ -73,13 +73,13 @@ handleInfo(mReinstallHandler, #state{module = Module, config = Config, sink = Si
installHandler(Module, Config, Sink),
kpS;
handleInfo({reboot, Sink}, _State) ->
eRum_app:startSink(Sink),
eLog_app:startSink(Sink),
kpS;
handleInfo(stop, State) ->
{stop, normal, State};
handleInfo({'EXIT', _Pid, killed}, #state{module = Module, config = Config, sink = Sink} = State) ->
Tmr = rumUtil:get_env(killerReTime, 5000),
_ = timer:apply_after(Tmr, eRum_app, startHandler, [Sink, Module, Config]),
Tmr = lgUtil:get_env(killerReTime, 5000),
_ = timer:apply_after(Tmr, eLog_app, startHandler, [Sink, Module, Config]),
{stop, normal, State};
handleInfo(_Msg, _State) ->
?ERR("~p info receive unexpect msg ~p ~n ", [?MODULE, _Msg]),
@ -94,9 +94,9 @@ code_change(_OldVsn, State, _Extra) ->
installHandler(Module, Config, Sink) ->
Ret =
case Module of
rumErrLoggerH ->
lgErrLoggerH ->
gen_event:add_sup_handler(Sink, Module, Config);
rumBkThrottle ->
lgBkThrottle ->
%% lager_backend_throttle需要知道它连接到哪个接收器' init'
%%
gen_emm:add_sup_epm(Sink, Module, [{sink, Sink} | Config]);
@ -106,7 +106,7 @@ installHandler(Module, Config, Sink) ->
case Ret of
ok ->
?INT_LOG(debug, "Lager installed handler ~p into ~p ~p", [Module, Sink, whereis(Sink)]),
%eRum:updateLogevelCfg(Sink),
%eLog:updateLogevelCfg(Sink),
ok;
{error, {fatal, Reason}} ->
?INT_LOG(error, "Lager fatally failed to install handler ~p into ~p, NOT retrying: ~p", [Module, Sink, Reason]),

src/watcher/rumHWatcherSup.erl → src/watcher/lgWatcherSup.erl Ver ficheiro

@ -1,4 +1,4 @@
-module(rumHWatcherSup).
-module(lgWatcherSup).
-behaviour(supervisor).
@ -36,12 +36,12 @@ init(_Args) ->
},
ChildSpecs = [
#{
id => rumHWatcherSrv,
start => {rumHWatcherSrv, start_link, []},
id => lgHWatcherSrv,
start => {lgHWatcherSrv, start_link, []},
restart => temporary,
shutdown => 5000,
type => worker,
modules => [rumHWatcherSrv]
modules => [lgHWatcherSrv]
}
],
{ok, {SupFlags, ChildSpecs}}.

Carregando…
Cancelar
Guardar