Skip to content

Commit fea0ae0

Browse files
authored
Merge pull request #194 from hyperledger/better-http-trace
Fix trace level logging
2 parents 3ea2aa6 + f8d5dcc commit fea0ae0

2 files changed

Lines changed: 39 additions & 8 deletions

File tree

pkg/ffresty/ffresty.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"context"
2121
"crypto/tls"
2222
"encoding/base64"
23+
"encoding/json"
2324
"fmt"
2425
"io"
2526
"net"
@@ -315,7 +316,9 @@ func NewWithConfig(ctx context.Context, ffrestyConfig Config) (client *resty.Cli
315316
}
316317

317318
log.L(rCtx).Debugf("==> %s %s%s", req.Method, _url, req.URL)
318-
log.L(rCtx).Tracef("==> (body) %+v", req.Body)
319+
if logrus.IsLevelEnabled(logrus.TraceLevel) {
320+
log.L(rCtx).Tracef("==> (body) %s", traceBody(req.Body))
321+
}
319322

320323
return nil
321324
})
@@ -373,6 +376,24 @@ func NewWithConfig(ctx context.Context, ffrestyConfig Config) (client *resty.Cli
373376
return client
374377
}
375378

379+
func traceBody(v any) string {
380+
switch vt := v.(type) {
381+
case string:
382+
return vt
383+
case []byte:
384+
return string(vt)
385+
case nil:
386+
return ""
387+
default:
388+
_, isReader := v.(io.Reader)
389+
if isReader {
390+
return "(binary reader)" // Future work could create a pipe to log the chunks if that were required
391+
}
392+
jv, _ := json.Marshal(v)
393+
return string(jv)
394+
}
395+
}
396+
376397
func WrapRestErr(ctx context.Context, res *resty.Response, err error, key i18n.ErrorMessageKey) error {
377398
var respData string
378399
if res != nil {

pkg/ffresty/ffresty_test.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,12 @@ import (
4545
"github.com/hyperledger/firefly-common/pkg/fftls"
4646
"github.com/hyperledger/firefly-common/pkg/i18n"
4747
"github.com/hyperledger/firefly-common/pkg/metric"
48+
"github.com/sirupsen/logrus"
4849
"golang.org/x/time/rate"
4950

5051
"github.com/jarcoal/httpmock"
5152
"github.com/stretchr/testify/assert"
53+
"github.com/stretchr/testify/require"
5254
)
5355

5456
const configDir = "../../test/data/config"
@@ -608,6 +610,8 @@ func TestBadKeyPair(t *testing.T) {
608610
}
609611

610612
func TestMTLSClientWithServer(t *testing.T) {
613+
logrus.SetLevel(logrus.TraceLevel)
614+
611615
// Create an X509 certificate pair
612616
privatekey, _ := rsa.GenerateKey(rand.Reader, 2048)
613617
publickey := &privatekey.PublicKey
@@ -661,13 +665,11 @@ func TestMTLSClientWithServer(t *testing.T) {
661665

662666
ctx, cancelCtx := context.WithCancel(context.Background())
663667
go func() {
664-
select {
665-
case <-ctx.Done():
666-
shutdownContext, cancel := context.WithTimeout(context.Background(), 2*time.Second)
667-
defer cancel()
668-
if err := server.Shutdown(shutdownContext); err != nil {
669-
return
670-
}
668+
<-ctx.Done()
669+
shutdownContext, cancel := context.WithTimeout(context.Background(), 2*time.Second)
670+
defer cancel()
671+
if err := server.Shutdown(shutdownContext); err != nil {
672+
return
671673
}
672674
}()
673675

@@ -809,3 +811,11 @@ func TestHooks(t *testing.T) {
809811
assert.Equal(t, onSuccessCount, 1)
810812

811813
}
814+
815+
func TestTrace(t *testing.T) {
816+
require.Equal(t, "plain", traceBody("plain"))
817+
require.Equal(t, "plain", traceBody([]byte("plain")))
818+
require.Equal(t, "", traceBody(nil))
819+
require.JSONEq(t, `{"some":"data"}`, traceBody(map[string]string{"some": "data"}))
820+
require.Equal(t, `(binary reader)`, traceBody(strings.NewReader("data to stream")))
821+
}

0 commit comments

Comments
 (0)