fix(postgres): format unicode error messages from driver
Fixes https://emqx.atlassian.net/browse/EMQX-11024 Sample error: ``` {error, error, <<"42501">>, insufficient_privilege, <<229,175,185,232,161,168,32,109,113,116,116,95,117,115,101,114,32,230,157,131,233,153,144,228,184,141,229,164,159>>, []} ```
This commit is contained in:
parent
f84efd98e5
commit
b07dddd49e
|
@ -1,7 +1,7 @@
|
|||
%% -*- mode: erlang -*-
|
||||
{application, emqx_connector, [
|
||||
{description, "EMQX Data Integration Connectors"},
|
||||
{vsn, "0.1.32"},
|
||||
{vsn, "0.1.33"},
|
||||
{registered, []},
|
||||
{mod, {emqx_connector_app, []}},
|
||||
{applications, [
|
||||
|
|
|
@ -246,13 +246,18 @@ on_sql_query(InstId, PoolName, Type, NameOrSQL, Data) ->
|
|||
pgsql_connector_query_return,
|
||||
#{error => Reason}
|
||||
),
|
||||
?SLOG(error, #{
|
||||
msg => "postgresql_connector_do_sql_query_failed",
|
||||
connector => InstId,
|
||||
type => Type,
|
||||
sql => NameOrSQL,
|
||||
reason => Reason
|
||||
}),
|
||||
?SLOG(
|
||||
error,
|
||||
maps:merge(
|
||||
#{
|
||||
msg => "postgresql_connector_do_sql_query_failed",
|
||||
connector => InstId,
|
||||
type => Type,
|
||||
sql => NameOrSQL
|
||||
},
|
||||
translate_to_log_context(Reason)
|
||||
)
|
||||
),
|
||||
case Reason of
|
||||
sync_required ->
|
||||
{error, {recoverable_error, Reason}};
|
||||
|
@ -452,10 +457,12 @@ init_prepare(State = #{prepare_sql := Prepares, pool_name := PoolName}) ->
|
|||
{ok, Sts} ->
|
||||
State#{prepare_statement := Sts};
|
||||
Error ->
|
||||
LogMeta = #{
|
||||
msg => <<"postgresql_init_prepare_statement_failed">>, error => Error
|
||||
},
|
||||
?SLOG(error, LogMeta),
|
||||
LogMsg =
|
||||
maps:merge(
|
||||
#{msg => <<"postgresql_init_prepare_statement_failed">>},
|
||||
translate_to_log_context(Error)
|
||||
),
|
||||
?SLOG(error, LogMsg),
|
||||
%% mark the prepare_sql as failed
|
||||
State#{prepare_sql => {error, Prepares}}
|
||||
end
|
||||
|
@ -500,10 +507,20 @@ prepare_sql_to_conn(Conn, [{Key, SQL} | PrepareList], Statements) when is_pid(Co
|
|||
{error, {error, error, _, undefined_table, _, _} = Error} ->
|
||||
%% Target table is not created
|
||||
?tp(pgsql_undefined_table, #{}),
|
||||
?SLOG(error, LogMeta#{msg => "postgresql_parse_failed", error => Error}),
|
||||
LogMsg =
|
||||
maps:merge(
|
||||
LogMeta#{msg => "postgresql_parse_failed"},
|
||||
translate_to_log_context(Error)
|
||||
),
|
||||
?SLOG(error, LogMsg),
|
||||
{error, undefined_table};
|
||||
{error, Error} = Other ->
|
||||
?SLOG(error, LogMeta#{msg => "postgresql_parse_failed", error => Error}),
|
||||
LogMsg =
|
||||
maps:merge(
|
||||
LogMeta#{msg => "postgresql_parse_failed"},
|
||||
translate_to_log_context(Error)
|
||||
),
|
||||
?SLOG(error, LogMsg),
|
||||
Other
|
||||
end.
|
||||
|
||||
|
@ -529,3 +546,21 @@ handle_batch_result([{error, Error} | _Rest], _Acc) ->
|
|||
{error, {unrecoverable_error, Error}};
|
||||
handle_batch_result([], Acc) ->
|
||||
{ok, Acc}.
|
||||
|
||||
translate_to_log_context(#error{} = Reason) ->
|
||||
#error{
|
||||
severity = Severity,
|
||||
code = Code,
|
||||
codename = Codename,
|
||||
message = Message,
|
||||
extra = Extra
|
||||
} = Reason,
|
||||
#{
|
||||
driver_severity => Severity,
|
||||
driver_error_codename => Codename,
|
||||
driver_error_code => Code,
|
||||
driver_error_message => emqx_logger_textfmt:try_format_unicode(Message),
|
||||
driver_error_extra => Extra
|
||||
};
|
||||
translate_to_log_context(Reason) ->
|
||||
#{reason => Reason}.
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Improved log formatting for Postgres bridge when there are unicode characters in the error messages returned by the driver.
|
Loading…
Reference in New Issue