diff --git a/config/sys-dev.config b/config/sys-dev.config index 03e3238..e72c833 100644 --- a/config/sys-dev.config +++ b/config/sys-dev.config @@ -85,6 +85,10 @@ {handler, default, logger_std_h, #{ level => debug, + filter_default => stop, + filters => [ + {iot_only, {fun logger_filters:domain/2, {log, sub, [iot]}}} + ], formatter => {logger_formatter, #{template => [time, " [", level, "] ", msg, "\n"]}} } }, @@ -92,6 +96,10 @@ {handler, disk, logger_disk_log_h, #{ level => debug, + filter_default => stop, + filters => [ + {iot_only, {fun logger_filters:domain/2, {log, sub, [iot]}}} + ], config => #{ file => "log/debug.log", max_no_files => 10, diff --git a/config/sys-prod.config b/config/sys-prod.config index dbd48e1..ca862f4 100644 --- a/config/sys-prod.config +++ b/config/sys-prod.config @@ -55,6 +55,10 @@ {handler, default, logger_std_h, #{ level => debug, + filter_default => stop, + filters => [ + {iot_only, {fun logger_filters:domain/2, {log, sub, [iot]}}} + ], formatter => {logger_formatter, #{template => [time, " [", level, "] ", msg, "\n"]}} } }, @@ -62,6 +66,10 @@ {handler, disk, logger_disk_log_h, #{ level => debug, + filter_default => stop, + filters => [ + {iot_only, {fun logger_filters:domain/2, {log, sub, [iot]}}} + ], config => #{ file => "log/debug.log", max_no_files => 10, diff --git a/rebar.config b/rebar.config index d7e7734..9b0f5e1 100644 --- a/rebar.config +++ b/rebar.config @@ -47,7 +47,7 @@ %% exist but can be set manually, which %% is required if the names aren't exactly %% sys.config and vm.args - {sys_config, "./config/sys.config"}, + {sys_config, "./config/sys-dev.config"}, {vm_args, "./config/vm.args"} %% the .src form of the configuration files do @@ -60,7 +60,8 @@ [%% prod is the default mode when prod %% profile is used, so does not have %% to be explicitly included like this - {mode, prod} + {mode, prod}, + {sys_config, "./config/sys-prod.config"} %% use minimal mode to exclude ERTS %% {mode, minimal} diff --git a/src/adapters/influxdb/influx_client.erl b/src/adapters/influxdb/influx_client.erl index 5b57b67..d7ccd73 100644 --- a/src/adapters/influxdb/influx_client.erl +++ b/src/adapters/influxdb/influx_client.erl @@ -101,6 +101,7 @@ start_link(Opts) when is_list(Opts) -> {ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} | {stop, Reason :: term()} | ignore). init([InfluxProps]) -> + ok = iot_log:set_metadata(), Token = proplists:get_value(token, InfluxProps), Host = proplists:get_value(host, InfluxProps), Port = proplists:get_value(port, InfluxProps), diff --git a/src/endpoint/endpoint_http.erl b/src/endpoint/endpoint_http.erl index d053049..7a01d8b 100644 --- a/src/endpoint/endpoint_http.erl +++ b/src/endpoint/endpoint_http.erl @@ -45,6 +45,7 @@ start_link(LocalName, Endpoint = #endpoint{config = #http_endpoint{}}) when is_a {ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} | {stop, Reason :: term()} | ignore). init([Endpoint = #endpoint{matcher = Matcher}]) -> + ok = iot_log:set_metadata(), endpoint_subscription:subscribe(Matcher, self()), Buffer = endpoint_buffer:new(Endpoint, 10), {ok, #state{endpoint = Endpoint, buffer = Buffer}}. diff --git a/src/endpoint/endpoint_kafka.erl b/src/endpoint/endpoint_kafka.erl index 686e681..6481119 100644 --- a/src/endpoint/endpoint_kafka.erl +++ b/src/endpoint/endpoint_kafka.erl @@ -51,6 +51,7 @@ start_link(LocalName, Endpoint = #endpoint{}) when is_atom(LocalName) -> %% gen_statem:start_link/[3,4], this function is called by the new %% process to initialize. init([Endpoint = #endpoint{id = Id, matcher = Matcher}]) -> + ok = iot_log:set_metadata(), endpoint_subscription:subscribe(Matcher, self()), erlang:process_flag(trap_exit, true), @@ -181,4 +182,4 @@ code_change(_OldVsn, State = #state{}, _Extra) -> %%%=================================================================== retry_connect() -> - erlang:start_timer(?RETRY_INTERVAL, self(), connect). \ No newline at end of file + erlang:start_timer(?RETRY_INTERVAL, self(), connect). diff --git a/src/endpoint/endpoint_mqtt.erl b/src/endpoint/endpoint_mqtt.erl index 71c50d0..272851b 100644 --- a/src/endpoint/endpoint_mqtt.erl +++ b/src/endpoint/endpoint_mqtt.erl @@ -53,6 +53,7 @@ start_link(LocalName, Endpoint = #endpoint{}) when is_atom(LocalName) -> %% gen_statem:start_link/[3,4], this function is called by the new %% process to initialize. init([Endpoint = #endpoint{matcher = Matcher}]) -> + ok = iot_log:set_metadata(), % erlang:process_flag(trap_exit, true), endpoint_subscription:subscribe(Matcher, self()), @@ -200,4 +201,4 @@ code_change(_OldVsn, State = #state{}, _Extra) -> %%%=================================================================== %%% Internal functions -%%%=================================================================== \ No newline at end of file +%%%=================================================================== diff --git a/src/endpoint/endpoint_subscription.erl b/src/endpoint/endpoint_subscription.erl index 3bc6d34..95387d7 100644 --- a/src/endpoint/endpoint_subscription.erl +++ b/src/endpoint/endpoint_subscription.erl @@ -69,6 +69,7 @@ start_link() -> {ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} | {stop, Reason :: term()} | ignore). init([]) -> + ok = iot_log:set_metadata(), {ok, #state{}}. %% @private @@ -203,4 +204,4 @@ order_num([<<$*>>|_]) -> order_num([<<$+>>|_]) -> 3; order_num([_|Tail]) -> - order_num(Tail). \ No newline at end of file + order_num(Tail). diff --git a/src/endpoint/endpoint_timer.erl b/src/endpoint/endpoint_timer.erl index 1244500..555f247 100644 --- a/src/endpoint/endpoint_timer.erl +++ b/src/endpoint/endpoint_timer.erl @@ -54,6 +54,7 @@ start_link(RetryInterval) when is_integer(RetryInterval) -> {ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} | {stop, Reason :: term()} | ignore). init([RetryInterval]) -> + ok = iot_log:set_metadata(), {ok, #state{retry_interval = RetryInterval}}. %% @private diff --git a/src/host/iot_event_stream_observer.erl b/src/host/iot_event_stream_observer.erl index 043b90d..0d55395 100644 --- a/src/host/iot_event_stream_observer.erl +++ b/src/host/iot_event_stream_observer.erl @@ -56,6 +56,7 @@ start_link() -> {ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} | {stop, Reason :: term()} | ignore). init([]) -> + ok = iot_log:set_metadata(), {ok, #state{}}. %% @private diff --git a/src/host/iot_host.erl b/src/host/iot_host.erl index 6d311b1..5f26c3d 100644 --- a/src/host/iot_host.erl +++ b/src/host/iot_host.erl @@ -174,6 +174,7 @@ start_link(Name, UUID) when is_atom(Name), is_binary(UUID) -> %% gen_statem:start_link/[3,4], this function is called by the new %% process to initialize. init([UUID]) -> + ok = iot_log:set_metadata(), case iot_api_client:get_host_by_uuid(UUID) of {ok, #{<<"id">> := HostId, <<"authorize_status">> := AuthorizeStatus}} -> %% 通过host_id注册别名, 可以避免通过查询数据库获取HostPid diff --git a/src/iot_app.erl b/src/iot_app.erl index 869b7aa..7d67918 100644 --- a/src/iot_app.erl +++ b/src/iot_app.erl @@ -9,6 +9,7 @@ -export([start/2, stop/1]). start(_StartType, _StartArgs) -> + ok = iot_log:set_metadata(), io:setopts([{encoding, unicode}]), %% 加速内存的回收 erlang:system_flag(fullsweep_after, 16), @@ -102,4 +103,4 @@ ensure_mnesia_schema() -> logger:debug("[iot_app] create mnesia schema failed with error: ~p", [Error]), throw({init_schema, Error}) end - end. \ No newline at end of file + end. diff --git a/src/iot_log.erl b/src/iot_log.erl new file mode 100644 index 0000000..ea4421c --- /dev/null +++ b/src/iot_log.erl @@ -0,0 +1,10 @@ +%%%------------------------------------------------------------------- +%%% @doc Logger helper for project-scoped metadata. +%%%------------------------------------------------------------------- +-module(iot_log). + +-export([set_metadata/0]). + +-spec set_metadata() -> ok. +set_metadata() -> + logger:set_process_metadata(#{domain => [iot]}). diff --git a/src/transport/http/event_stream_handler.erl b/src/transport/http/event_stream_handler.erl index dadc89b..cad5089 100644 --- a/src/transport/http/event_stream_handler.erl +++ b/src/transport/http/event_stream_handler.erl @@ -13,6 +13,7 @@ -export([init/2]). init(Req0, Opts) -> + ok = iot_log:set_metadata(), Method = binary_to_list(cowboy_req:method(Req0)), Path = binary_to_list(cowboy_req:path(Req0)), GetParams0 = cowboy_req:parse_qs(Req0), @@ -44,4 +45,4 @@ receiver_events(TaskId, Req) -> {stream_close, TaskId, Reason} -> CloseFrame = iolist_to_binary([<<"event: close\n">>, <<"data: ", Reason/binary, "\n">>, <<"\n">>]), ok = cowboy_req:stream_body(CloseFrame, fin, Req) - end. \ No newline at end of file + end. diff --git a/src/transport/http/http_protocol.erl b/src/transport/http/http_protocol.erl index d6a757c..192726c 100644 --- a/src/transport/http/http_protocol.erl +++ b/src/transport/http/http_protocol.erl @@ -13,6 +13,7 @@ -export([init/2]). init(Req0, Opts = [Mod|_]) -> + ok = iot_log:set_metadata(), Method = binary_to_list(cowboy_req:method(Req0)), Path = binary_to_list(cowboy_req:path(Req0)), GetParams0 = cowboy_req:parse_qs(Req0), @@ -84,4 +85,4 @@ read_body(Req, AccData) -> {ok, <>, Req1}; {more, Data, Req1} -> read_body(Req1, <>) - end. \ No newline at end of file + end. diff --git a/src/transport/tcp/tcp_channel.erl b/src/transport/tcp/tcp_channel.erl index 4d80a28..8834c20 100644 --- a/src/transport/tcp/tcp_channel.erl +++ b/src/transport/tcp/tcp_channel.erl @@ -64,6 +64,7 @@ start_link(Ref, Transport, Opts) -> {ok, proc_lib:spawn_link(?MODULE, init, [Ref, Transport, Opts])}. init(Ref, Transport, _Opts = []) -> + ok = iot_log:set_metadata(), {ok, Socket} = ranch:handshake(Ref), logger:debug("[sdlan_channel] get a new connection: ~p", [Socket]), Transport:setopts(Socket, [binary, {active, true}, {packet, 4}]),