-module(beam_stats_consumer_csv).
-include("include/beam_stats.hrl").
+-include("beam_stats_logging.hrl").
-behaviour(beam_stats_consumer).
-spec try_to_write(state(), binary()) ->
state().
try_to_write(#state{file=none, path=Path}=State, _) ->
- io:format("error: file closed: ~s~n", [Path]),
+ ?log_error("Writing to file (~p) failed: no file in state.", [Path]),
State;
try_to_write(#state{file={some, File}}=State, Payload) ->
case file:write(File, Payload)
of ok ->
State
; {error, _}=Error ->
- io:format("error: file:write/2 failed: ~p~n", [Error]),
+ ?log_error("file:write(~p, ~p) -> ~p", [File, Payload, Error]),
% TODO: Maybe schedule retry?
ok = file:close(File),
State#state{file=none}
try_to_open_if_no_file(#state{file={some, _}}=State) ->
State;
try_to_open_if_no_file(#state{file=none, path=Path}=State) ->
- case file:open(Path, [append])
+ Options = [append],
+ case file:open(Path, Options)
of {ok, File} ->
State#state{file = {some, File}}
; {error, _}=Error ->
- io:format("error: file:open/2 failed: ~p~n", [Error]),
+ ?log_error("file:open(~p, ~p) -> ~p", [Path, Options, Error]),
State#state{file = none}
end.
-module(beam_stats_consumer_graphite).
-include("include/beam_stats.hrl").
+-include("beam_stats_logging.hrl").
-behaviour(beam_stats_consumer).
-spec try_to_send(state(), binary()) ->
state().
try_to_send(#state{sock=none}=State, _) ->
- io:format("error: socket closed~n"),
+ ?log_error("Sending failed. No socket in state."),
% TODO: Maybe schedule retry?
State;
try_to_send(#state{sock={some, Sock}}=State, Payload) ->
of ok ->
State
; {error, _}=Error ->
- io:format("error: gen_tcp:send/2 failed: ~p~n", [Error]),
+ ?log_error("gen_tcp:send(~p, ~p) -> ~p", [Sock, Payload, Error]),
% TODO: Maybe schedule retry?
ok = gen_tcp:close(Sock),
State#state{sock=none}
, timeout = Timeout
}=State
) ->
- case gen_tcp:connect(Host, Port, [binary, {active, false}], Timeout)
+ Options = [binary, {active, false}],
+ case gen_tcp:connect(Host, Port, Options, Timeout)
of {ok, Sock} ->
State#state{sock = {some, Sock}}
; {error, _}=Error ->
- io:format("error: gen_tcp:connect/4 failed: ~p~n", [Error]),
+ ?log_error(
+ "gen_tcp:connect(~p, ~p, ~p, ~p) -> ~p",
+ [Host, Port, Options, Timeout, Error]
+ ),
State#state{sock = none}
end.
-module(beam_stats_consumer_statsd).
-include("include/beam_stats.hrl").
+-include("beam_stats_logging.hrl").
-behaviour(beam_stats_consumer).
-spec try_to_send(state(), binary()) ->
state().
try_to_send(#state{sock=none}=State, _) ->
- io:format("error: socket closed~n"),
+ ?log_error("Sending failed. No socket in state."),
% TODO: Maybe schedule retry?
State;
try_to_send(
of ok ->
State
; {error, _}=Error ->
- io:format("error: gen_udp:send/4 failed: ~p~n", [Error]),
+ ?log_error(
+ "gen_udp:send(~p, ~p, ~p, ~p) -> ~p",
+ [Sock, DstHost, DstPort, Error]
+ ),
% TODO: Do something with unsent messages?
ok = gen_udp:close(Sock),
State#state{sock=none}
of {ok, Sock} ->
State#state{sock = {some, Sock}}
; {error, _}=Error ->
- io:format("error: gen_udp:open/1 failed: ~p~n", [Error]),
+ ?log_error("gen_udp:open(~p) -> ~p", [SrcPort, Error]),
State#state{sock = none}
end.
--- /dev/null
+-define(log_error(Format) , error_logger:error_msg(Format)).
+-define(log_error(Format, Args), error_logger:error_msg(Format, Args)).