Sfoglia il codice sorgente

Merge pull request #11754 from thalesmg/fix-postgres-error-reason-log-m-20231011

fix(postgres): format unicode error messages from driver
Thales Macedo Garitezi 2 anni fa
parent
commit
7a6c756b7c

+ 1 - 1
apps/emqx_connector/src/emqx_connector.app.src

@@ -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, [

+ 48 - 13
apps/emqx_connector/src/emqx_connector_pgsql.erl

@@ -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}.

+ 1 - 0
changes/ee/fix-11754.en.md

@@ -0,0 +1 @@
+Improved log formatting for Postgres bridge when there are unicode characters in the error messages returned by the driver.