diff options
author | Micael Karlberg <[email protected]> | 2018-12-13 16:38:52 +0100 |
---|---|---|
committer | Micael Karlberg <[email protected]> | 2018-12-14 12:03:05 +0100 |
commit | aed92219aacf962a9d6c71ea448809fe2c9acae6 (patch) | |
tree | 0c7ee62dfbf9dce930433b94785cf50911b10720 /erts/emulator/test/socket_test_logger.erl | |
parent | 73eae9c9c3e458d6d6cffb0cdbfb6ce80a340be1 (diff) | |
download | otp-aed92219aacf962a9d6c71ea448809fe2c9acae6.tar.gz otp-aed92219aacf962a9d6c71ea448809fe2c9acae6.tar.bz2 otp-aed92219aacf962a9d6c71ea448809fe2c9acae6.zip |
[socket-nif|test] Add a "global" logger
Added a global logger that make it possible to log
from the slave nodes (with "ease").
Also "fixed" the test case that failed on "older"
linux (Ubuntu 14.04). For now we let it skip
instead (we should really check the OS version).
Also corrected a couple of (ping-pong) cases for which
the buffer adjustments did not work.
OTP-14831
Diffstat (limited to 'erts/emulator/test/socket_test_logger.erl')
-rw-r--r-- | erts/emulator/test/socket_test_logger.erl | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/erts/emulator/test/socket_test_logger.erl b/erts/emulator/test/socket_test_logger.erl new file mode 100644 index 0000000000..5996bbe855 --- /dev/null +++ b/erts/emulator/test/socket_test_logger.erl @@ -0,0 +1,99 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2018-2018. All Rights Reserved. +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%% +%% %CopyrightEnd% +%% + +-module(socket_test_logger). + +-export([ + start/0, + stop/0, + format/2 + ]). + + +-define(LIB, socket_test_lib). +-define(LOGGER, ?MODULE). + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +start() -> + case global:whereis_name(?LOGGER) of + Pid when is_pid(Pid) -> + ok; + undefined -> + Self = self(), + Pid = spawn_link(fun() -> init(Self) end), + yes = global:register_name(?LOGGER, Pid), + ok + end. + + +stop() -> + case global:whereis_name(?LOGGER) of + undefined -> + ok; + Pid when is_pid(Pid) -> + global:unregister_name(?LOGGER), + Pid ! {?LOGGER, '$logger', stop}, + ok + end. + + +format(F, []) -> + do_format(F); +format(F, A) -> + do_format(?LIB:f(F, A)). + +do_format(Msg) -> + case global:whereis_name(?LOGGER) of + undefined -> + ok; + Pid when is_pid(Pid) -> + Pid ! {?MODULE, '$logger', {msg, Msg}}, + ok + end. + +init(Parent) -> + put(sname, "logger"), + print("[~s][logger] starting~n", [?LIB:formated_timestamp()]), + loop(#{parent => Parent}). + +loop(#{parent := Parent} = State) -> + receive + {'EXIT', Parent, _} -> + print("[~s][logger] parent exit~n", [?LIB:formated_timestamp()]), + exit(normal); + + {?MODULE, '$logger', stop} -> + print("[~s][logger] stopping~n", [?LIB:formated_timestamp()]), + exit(normal); + + {?MODULE, '$logger', {msg, Msg}} -> + print(Msg), + loop(State) + end. + + +print(F, A) -> + print(?LIB:f(F, A)). + +print(Str) -> + io:format(user, Str ++ "~n", []), + io:format(Str, []). |