diff --git a/internal/pgengine/log_hook.go b/internal/pgengine/log_hook.go index 67480419..14f466e9 100644 --- a/internal/pgengine/log_hook.go +++ b/internal/pgengine/log_hook.go @@ -141,6 +141,12 @@ func (hook *LogHook) send(cache []logrus.Entry) { []string{"ts", "client_name", "pid", "log_level", "message", "message_data"}, pgx.CopyFromSlice(len(cache), func(i int) ([]any, error) { + if errVal, ok := cache[i].Data[logrus.ErrorKey]; ok { + if e, isErr := errVal.(error); isErr && e != nil { + cache[i].Data[logrus.ErrorKey] = e.Error() + } + } + jsonData, err := json.Marshal(cache[i].Data) if err != nil { return nil, err diff --git a/internal/pgengine/transaction.go b/internal/pgengine/transaction.go index f0446463..4655ace5 100644 --- a/internal/pgengine/transaction.go +++ b/internal/pgengine/transaction.go @@ -124,14 +124,15 @@ func (pge *PgEngine) ExecuteSQLCommand(ctx context.Context, executor executor, t } if len(paramValues) == 0 { //mimic empty param ct, e := executor.Exec(ctx, task.Command) - pge.LogTaskExecution(context.Background(), task, errCodes[err != nil], ct.String(), "") + pge.LogTaskExecution(context.Background(), task, errCodes[e != nil], ct.String(), "") return e } for _, val := range paramValues { if val == "" { continue } - if err = json.Unmarshal([]byte(val), ¶ms); err != nil { + if parseErr := json.Unmarshal([]byte(val), ¶ms); parseErr != nil { + err = errors.Join(err, fmt.Errorf("failed to parse parameter %s: %w", val, parseErr)) return } ct, e := executor.Exec(ctx, task.Command, params...)