You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by yu...@apache.org on 2023/12/04 21:28:45 UTC

(thrift) branch go-slog updated (10caefc63 -> d2dadfc69)

This is an automated email from the ASF dual-hosted git repository.

yuxuan pushed a change to branch go-slog
in repository https://gitbox.apache.org/repos/asf/thrift.git


    omit 10caefc63 THRIFT-5744: Switch to slog for go library
     new d2dadfc69 THRIFT-5744: Switch to slog for go library

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (10caefc63)
            \
             N -- N -- N   refs/heads/go-slog (d2dadfc69)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 lib/go/test/fuzz/Makefile.am | 4 ----
 1 file changed, 4 deletions(-)


(thrift) 01/01: THRIFT-5744: Switch to slog for go library

Posted by yu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

yuxuan pushed a commit to branch go-slog
in repository https://gitbox.apache.org/repos/asf/thrift.git

commit d2dadfc69948e39cf8db1c4f03e2a9283e452515
Author: Yuxuan 'fishy' Wang <yu...@reddit.com>
AuthorDate: Fri Nov 17 12:36:31 2023 -0800

    THRIFT-5744: Switch to slog for go library
    
    Client: go
---
 .github/workflows/build.yml     |   4 +-
 LANGUAGES.md                    |   2 +-
 go.mod                          |   2 +-
 lib/go/test/fuzz/go.mod         |   2 +-
 lib/go/test/go.mod              |   2 +-
 lib/go/thrift/debug_protocol.go | 329 +++++++++++++++++++++++++++++++++-------
 lib/go/thrift/logger.go         |  12 ++
 lib/go/thrift/simple_server.go  |  23 ++-
 test/go/go.mod                  |   4 +-
 test/go/go.sum                  |   2 -
 10 files changed, 315 insertions(+), 67 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index d963b0a9e..35d41f09e 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -82,8 +82,8 @@ jobs:
     strategy:
       matrix:
         go:
-          - '1.20'
           - '1.21'
+          # TODO: Add 1.22 when it's released
       fail-fast: false
     steps:
       - uses: actions/checkout@v4
@@ -127,7 +127,7 @@ jobs:
         run: make -C test/go precross
 
       - name: Upload go precross artifacts
-        if: matrix.go == '1.21'
+        if: matrix.go == '1.21' # TODO: change to 1.22 when it's released
         uses: actions/upload-artifact@v3
         with:
           name: go-precross
diff --git a/LANGUAGES.md b/LANGUAGES.md
index 236007f9a..4952ade15 100644
--- a/LANGUAGES.md
+++ b/LANGUAGES.md
@@ -163,7 +163,7 @@ Thrift's core protocol is TBinary, supported by all languages except for JavaScr
 <td align=left><a href="https://github.com/apache/thrift/blob/master/lib/go/README.md">Go</a></td>
 <!-- Since -----------------><td>0.7.0</td>
 <!-- Build Systems ---------><td><img src="/doc/images/cgrn.png" alt="Yes"/></td><td><img src="/doc/images/cred.png" alt=""/></td>
-<!-- Language Levels -------><td>1.20</td><td>1.21</td>
+<!-- Language Levels -------><td>1.21</td><td>1.22</td>
 <!-- Field types -----------><td><img src="/doc/images/cred.png" alt=""/></td>
 <!-- Low-Level Transports --><td><img src="/doc/images/cred.png" alt=""/></td><td><img src="/doc/images/cred.png" alt=""/></td><td><img src="/doc/images/cgrn.png" alt="Yes"/></td><td><img src="/doc/images/cred.png" alt=""/></td><td><img src="/doc/images/cgrn.png" alt="Yes"/></td><td><img src="/doc/images/cgrn.png" alt="Yes"/></td>
 <!-- Transport Wrappers ----><td><img src="/doc/images/cgrn.png" alt="Yes"/></td><td><img src="/doc/images/cgrn.png" alt="Yes"/></td><td><img src="/doc/images/cgrn.png" alt="Yes"/></td><td><img src="/doc/images/cgrn.png" alt="Yes"/></td>
diff --git a/go.mod b/go.mod
index 7be425635..b435d78a3 100644
--- a/go.mod
+++ b/go.mod
@@ -1,3 +1,3 @@
 module github.com/apache/thrift
 
-go 1.20
+go 1.21
diff --git a/lib/go/test/fuzz/go.mod b/lib/go/test/fuzz/go.mod
index 4ff6c5d93..b7ddd5fcc 100644
--- a/lib/go/test/fuzz/go.mod
+++ b/lib/go/test/fuzz/go.mod
@@ -1,6 +1,6 @@
 module github.com/apache/thrift/lib/go/test/fuzz
 
-go 1.20
+go 1.21
 
 require github.com/apache/thrift v0.0.0-00010101000000-000000000000
 
diff --git a/lib/go/test/go.mod b/lib/go/test/go.mod
index 59535e644..0c032b70f 100644
--- a/lib/go/test/go.mod
+++ b/lib/go/test/go.mod
@@ -1,6 +1,6 @@
 module github.com/apache/thrift/lib/go/test
 
-go 1.20
+go 1.21
 
 require (
 	github.com/apache/thrift v0.0.0-00010101000000-000000000000
diff --git a/lib/go/thrift/debug_protocol.go b/lib/go/thrift/debug_protocol.go
index 83ccad94b..d730411b4 100644
--- a/lib/go/thrift/debug_protocol.go
+++ b/lib/go/thrift/debug_protocol.go
@@ -21,7 +21,7 @@ package thrift
 
 import (
 	"context"
-	"fmt"
+	"log/slog"
 )
 
 type TDebugProtocol struct {
@@ -34,7 +34,11 @@ type TDebugProtocol struct {
 	// If Logger is nil, StdLogger using stdlib log package with os.Stderr
 	// will be used. If disable logging is desired, set Logger to NopLogger
 	// explicitly instead of leaving it as nil/unset.
-	Logger    Logger
+	//
+	// Deprecated: TDebugProtocol always use slog at debug level now.
+	// This field will be removed in a future version.
+	Logger Logger
+
 	LogPrefix string
 
 	// Optional. An TProtocol to duplicate everything read/written from Delegate.
@@ -86,13 +90,16 @@ func (t *TDebugProtocolFactory) GetProtocol(trans TTransport) TProtocol {
 	}
 }
 
-func (tdp *TDebugProtocol) logf(format string, v ...interface{}) {
-	fallbackLogger(tdp.Logger)(fmt.Sprintf(format, v...))
-}
-
 func (tdp *TDebugProtocol) WriteMessageBegin(ctx context.Context, name string, typeId TMessageType, seqid int32) error {
 	err := tdp.Delegate.WriteMessageBegin(ctx, name, typeId, seqid)
-	tdp.logf("%sWriteMessageBegin(name=%#v, typeId=%#v, seqid=%#v) => %#v", tdp.LogPrefix, name, typeId, seqid, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteMessageBegin",
+		"name", name,
+		"typeId", typeId,
+		"seqid", seqid,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteMessageBegin(ctx, name, typeId, seqid)
 	}
@@ -100,7 +107,11 @@ func (tdp *TDebugProtocol) WriteMessageBegin(ctx context.Context, name string, t
 }
 func (tdp *TDebugProtocol) WriteMessageEnd(ctx context.Context) error {
 	err := tdp.Delegate.WriteMessageEnd(ctx)
-	tdp.logf("%sWriteMessageEnd() => %#v", tdp.LogPrefix, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteMessageEnd",
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteMessageEnd(ctx)
 	}
@@ -108,7 +119,12 @@ func (tdp *TDebugProtocol) WriteMessageEnd(ctx context.Context) error {
 }
 func (tdp *TDebugProtocol) WriteStructBegin(ctx context.Context, name string) error {
 	err := tdp.Delegate.WriteStructBegin(ctx, name)
-	tdp.logf("%sWriteStructBegin(name=%#v) => %#v", tdp.LogPrefix, name, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteStructBegin",
+		"name", name,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteStructBegin(ctx, name)
 	}
@@ -116,7 +132,11 @@ func (tdp *TDebugProtocol) WriteStructBegin(ctx context.Context, name string) er
 }
 func (tdp *TDebugProtocol) WriteStructEnd(ctx context.Context) error {
 	err := tdp.Delegate.WriteStructEnd(ctx)
-	tdp.logf("%sWriteStructEnd() => %#v", tdp.LogPrefix, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteStructEnd",
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteStructEnd(ctx)
 	}
@@ -124,7 +144,14 @@ func (tdp *TDebugProtocol) WriteStructEnd(ctx context.Context) error {
 }
 func (tdp *TDebugProtocol) WriteFieldBegin(ctx context.Context, name string, typeId TType, id int16) error {
 	err := tdp.Delegate.WriteFieldBegin(ctx, name, typeId, id)
-	tdp.logf("%sWriteFieldBegin(name=%#v, typeId=%#v, id%#v) => %#v", tdp.LogPrefix, name, typeId, id, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteFieldBegin",
+		"name", name,
+		"typeId", typeId,
+		"id", id,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteFieldBegin(ctx, name, typeId, id)
 	}
@@ -132,7 +159,11 @@ func (tdp *TDebugProtocol) WriteFieldBegin(ctx context.Context, name string, typ
 }
 func (tdp *TDebugProtocol) WriteFieldEnd(ctx context.Context) error {
 	err := tdp.Delegate.WriteFieldEnd(ctx)
-	tdp.logf("%sWriteFieldEnd() => %#v", tdp.LogPrefix, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteFieldEnd",
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteFieldEnd(ctx)
 	}
@@ -140,7 +171,11 @@ func (tdp *TDebugProtocol) WriteFieldEnd(ctx context.Context) error {
 }
 func (tdp *TDebugProtocol) WriteFieldStop(ctx context.Context) error {
 	err := tdp.Delegate.WriteFieldStop(ctx)
-	tdp.logf("%sWriteFieldStop() => %#v", tdp.LogPrefix, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteFieldStop",
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteFieldStop(ctx)
 	}
@@ -148,7 +183,14 @@ func (tdp *TDebugProtocol) WriteFieldStop(ctx context.Context) error {
 }
 func (tdp *TDebugProtocol) WriteMapBegin(ctx context.Context, keyType TType, valueType TType, size int) error {
 	err := tdp.Delegate.WriteMapBegin(ctx, keyType, valueType, size)
-	tdp.logf("%sWriteMapBegin(keyType=%#v, valueType=%#v, size=%#v) => %#v", tdp.LogPrefix, keyType, valueType, size, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteMapBegin",
+		"keyType", keyType,
+		"valueType", valueType,
+		"size", size,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteMapBegin(ctx, keyType, valueType, size)
 	}
@@ -156,7 +198,11 @@ func (tdp *TDebugProtocol) WriteMapBegin(ctx context.Context, keyType TType, val
 }
 func (tdp *TDebugProtocol) WriteMapEnd(ctx context.Context) error {
 	err := tdp.Delegate.WriteMapEnd(ctx)
-	tdp.logf("%sWriteMapEnd() => %#v", tdp.LogPrefix, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteMapEnd",
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteMapEnd(ctx)
 	}
@@ -164,7 +210,13 @@ func (tdp *TDebugProtocol) WriteMapEnd(ctx context.Context) error {
 }
 func (tdp *TDebugProtocol) WriteListBegin(ctx context.Context, elemType TType, size int) error {
 	err := tdp.Delegate.WriteListBegin(ctx, elemType, size)
-	tdp.logf("%sWriteListBegin(elemType=%#v, size=%#v) => %#v", tdp.LogPrefix, elemType, size, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteListBegin",
+		"elemType", elemType,
+		"size", size,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteListBegin(ctx, elemType, size)
 	}
@@ -172,7 +224,11 @@ func (tdp *TDebugProtocol) WriteListBegin(ctx context.Context, elemType TType, s
 }
 func (tdp *TDebugProtocol) WriteListEnd(ctx context.Context) error {
 	err := tdp.Delegate.WriteListEnd(ctx)
-	tdp.logf("%sWriteListEnd() => %#v", tdp.LogPrefix, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteListEnd",
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteListEnd(ctx)
 	}
@@ -180,7 +236,13 @@ func (tdp *TDebugProtocol) WriteListEnd(ctx context.Context) error {
 }
 func (tdp *TDebugProtocol) WriteSetBegin(ctx context.Context, elemType TType, size int) error {
 	err := tdp.Delegate.WriteSetBegin(ctx, elemType, size)
-	tdp.logf("%sWriteSetBegin(elemType=%#v, size=%#v) => %#v", tdp.LogPrefix, elemType, size, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteSetBegin",
+		"elemType", elemType,
+		"size", size,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteSetBegin(ctx, elemType, size)
 	}
@@ -188,7 +250,11 @@ func (tdp *TDebugProtocol) WriteSetBegin(ctx context.Context, elemType TType, si
 }
 func (tdp *TDebugProtocol) WriteSetEnd(ctx context.Context) error {
 	err := tdp.Delegate.WriteSetEnd(ctx)
-	tdp.logf("%sWriteSetEnd() => %#v", tdp.LogPrefix, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteSetEnd",
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteSetEnd(ctx)
 	}
@@ -196,7 +262,12 @@ func (tdp *TDebugProtocol) WriteSetEnd(ctx context.Context) error {
 }
 func (tdp *TDebugProtocol) WriteBool(ctx context.Context, value bool) error {
 	err := tdp.Delegate.WriteBool(ctx, value)
-	tdp.logf("%sWriteBool(value=%#v) => %#v", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteBool",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteBool(ctx, value)
 	}
@@ -204,7 +275,12 @@ func (tdp *TDebugProtocol) WriteBool(ctx context.Context, value bool) error {
 }
 func (tdp *TDebugProtocol) WriteByte(ctx context.Context, value int8) error {
 	err := tdp.Delegate.WriteByte(ctx, value)
-	tdp.logf("%sWriteByte(value=%#v) => %#v", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteByte",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteByte(ctx, value)
 	}
@@ -212,7 +288,12 @@ func (tdp *TDebugProtocol) WriteByte(ctx context.Context, value int8) error {
 }
 func (tdp *TDebugProtocol) WriteI16(ctx context.Context, value int16) error {
 	err := tdp.Delegate.WriteI16(ctx, value)
-	tdp.logf("%sWriteI16(value=%#v) => %#v", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteI16",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteI16(ctx, value)
 	}
@@ -220,7 +301,12 @@ func (tdp *TDebugProtocol) WriteI16(ctx context.Context, value int16) error {
 }
 func (tdp *TDebugProtocol) WriteI32(ctx context.Context, value int32) error {
 	err := tdp.Delegate.WriteI32(ctx, value)
-	tdp.logf("%sWriteI32(value=%#v) => %#v", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteI32",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteI32(ctx, value)
 	}
@@ -228,7 +314,12 @@ func (tdp *TDebugProtocol) WriteI32(ctx context.Context, value int32) error {
 }
 func (tdp *TDebugProtocol) WriteI64(ctx context.Context, value int64) error {
 	err := tdp.Delegate.WriteI64(ctx, value)
-	tdp.logf("%sWriteI64(value=%#v) => %#v", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteI64",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteI64(ctx, value)
 	}
@@ -236,7 +327,12 @@ func (tdp *TDebugProtocol) WriteI64(ctx context.Context, value int64) error {
 }
 func (tdp *TDebugProtocol) WriteDouble(ctx context.Context, value float64) error {
 	err := tdp.Delegate.WriteDouble(ctx, value)
-	tdp.logf("%sWriteDouble(value=%#v) => %#v", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteDouble",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteDouble(ctx, value)
 	}
@@ -244,7 +340,12 @@ func (tdp *TDebugProtocol) WriteDouble(ctx context.Context, value float64) error
 }
 func (tdp *TDebugProtocol) WriteString(ctx context.Context, value string) error {
 	err := tdp.Delegate.WriteString(ctx, value)
-	tdp.logf("%sWriteString(value=%#v) => %#v", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteString",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteString(ctx, value)
 	}
@@ -252,7 +353,12 @@ func (tdp *TDebugProtocol) WriteString(ctx context.Context, value string) error
 }
 func (tdp *TDebugProtocol) WriteBinary(ctx context.Context, value []byte) error {
 	err := tdp.Delegate.WriteBinary(ctx, value)
-	tdp.logf("%sWriteBinary(value=%#v) => %#v", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteBinary",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteBinary(ctx, value)
 	}
@@ -260,7 +366,12 @@ func (tdp *TDebugProtocol) WriteBinary(ctx context.Context, value []byte) error
 }
 func (tdp *TDebugProtocol) WriteUUID(ctx context.Context, value Tuuid) error {
 	err := tdp.Delegate.WriteUUID(ctx, value)
-	tdp.logf("%sWriteUUID(value=%#v) => %#v", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"WriteUUID",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteUUID(ctx, value)
 	}
@@ -269,7 +380,14 @@ func (tdp *TDebugProtocol) WriteUUID(ctx context.Context, value Tuuid) error {
 
 func (tdp *TDebugProtocol) ReadMessageBegin(ctx context.Context) (name string, typeId TMessageType, seqid int32, err error) {
 	name, typeId, seqid, err = tdp.Delegate.ReadMessageBegin(ctx)
-	tdp.logf("%sReadMessageBegin() (name=%#v, typeId=%#v, seqid=%#v, err=%#v)", tdp.LogPrefix, name, typeId, seqid, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadMessageBegin",
+		"name", name,
+		"typeId", typeId,
+		"seqid", seqid,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteMessageBegin(ctx, name, typeId, seqid)
 	}
@@ -277,7 +395,11 @@ func (tdp *TDebugProtocol) ReadMessageBegin(ctx context.Context) (name string, t
 }
 func (tdp *TDebugProtocol) ReadMessageEnd(ctx context.Context) (err error) {
 	err = tdp.Delegate.ReadMessageEnd(ctx)
-	tdp.logf("%sReadMessageEnd() err=%#v", tdp.LogPrefix, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadMessageEnd",
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteMessageEnd(ctx)
 	}
@@ -285,7 +407,12 @@ func (tdp *TDebugProtocol) ReadMessageEnd(ctx context.Context) (err error) {
 }
 func (tdp *TDebugProtocol) ReadStructBegin(ctx context.Context) (name string, err error) {
 	name, err = tdp.Delegate.ReadStructBegin(ctx)
-	tdp.logf("%sReadStructBegin() (name%#v, err=%#v)", tdp.LogPrefix, name, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadStructBegin",
+		"name", name,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteStructBegin(ctx, name)
 	}
@@ -293,7 +420,11 @@ func (tdp *TDebugProtocol) ReadStructBegin(ctx context.Context) (name string, er
 }
 func (tdp *TDebugProtocol) ReadStructEnd(ctx context.Context) (err error) {
 	err = tdp.Delegate.ReadStructEnd(ctx)
-	tdp.logf("%sReadStructEnd() err=%#v", tdp.LogPrefix, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadStructEnd",
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteStructEnd(ctx)
 	}
@@ -301,7 +432,14 @@ func (tdp *TDebugProtocol) ReadStructEnd(ctx context.Context) (err error) {
 }
 func (tdp *TDebugProtocol) ReadFieldBegin(ctx context.Context) (name string, typeId TType, id int16, err error) {
 	name, typeId, id, err = tdp.Delegate.ReadFieldBegin(ctx)
-	tdp.logf("%sReadFieldBegin() (name=%#v, typeId=%#v, id=%#v, err=%#v)", tdp.LogPrefix, name, typeId, id, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadFieldBegin",
+		"name", name,
+		"typeId", typeId,
+		"id", id,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteFieldBegin(ctx, name, typeId, id)
 	}
@@ -309,7 +447,11 @@ func (tdp *TDebugProtocol) ReadFieldBegin(ctx context.Context) (name string, typ
 }
 func (tdp *TDebugProtocol) ReadFieldEnd(ctx context.Context) (err error) {
 	err = tdp.Delegate.ReadFieldEnd(ctx)
-	tdp.logf("%sReadFieldEnd() err=%#v", tdp.LogPrefix, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadFieldEnd",
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteFieldEnd(ctx)
 	}
@@ -317,7 +459,14 @@ func (tdp *TDebugProtocol) ReadFieldEnd(ctx context.Context) (err error) {
 }
 func (tdp *TDebugProtocol) ReadMapBegin(ctx context.Context) (keyType TType, valueType TType, size int, err error) {
 	keyType, valueType, size, err = tdp.Delegate.ReadMapBegin(ctx)
-	tdp.logf("%sReadMapBegin() (keyType=%#v, valueType=%#v, size=%#v, err=%#v)", tdp.LogPrefix, keyType, valueType, size, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadMapBegin",
+		"keyType", keyType,
+		"valueType", valueType,
+		"size", size,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteMapBegin(ctx, keyType, valueType, size)
 	}
@@ -325,7 +474,11 @@ func (tdp *TDebugProtocol) ReadMapBegin(ctx context.Context) (keyType TType, val
 }
 func (tdp *TDebugProtocol) ReadMapEnd(ctx context.Context) (err error) {
 	err = tdp.Delegate.ReadMapEnd(ctx)
-	tdp.logf("%sReadMapEnd() err=%#v", tdp.LogPrefix, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadMapEnd",
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteMapEnd(ctx)
 	}
@@ -333,7 +486,13 @@ func (tdp *TDebugProtocol) ReadMapEnd(ctx context.Context) (err error) {
 }
 func (tdp *TDebugProtocol) ReadListBegin(ctx context.Context) (elemType TType, size int, err error) {
 	elemType, size, err = tdp.Delegate.ReadListBegin(ctx)
-	tdp.logf("%sReadListBegin() (elemType=%#v, size=%#v, err=%#v)", tdp.LogPrefix, elemType, size, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadListBegin",
+		"elemType", elemType,
+		"size", size,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteListBegin(ctx, elemType, size)
 	}
@@ -341,7 +500,11 @@ func (tdp *TDebugProtocol) ReadListBegin(ctx context.Context) (elemType TType, s
 }
 func (tdp *TDebugProtocol) ReadListEnd(ctx context.Context) (err error) {
 	err = tdp.Delegate.ReadListEnd(ctx)
-	tdp.logf("%sReadListEnd() err=%#v", tdp.LogPrefix, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadListEnd",
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteListEnd(ctx)
 	}
@@ -349,7 +512,13 @@ func (tdp *TDebugProtocol) ReadListEnd(ctx context.Context) (err error) {
 }
 func (tdp *TDebugProtocol) ReadSetBegin(ctx context.Context) (elemType TType, size int, err error) {
 	elemType, size, err = tdp.Delegate.ReadSetBegin(ctx)
-	tdp.logf("%sReadSetBegin() (elemType=%#v, size=%#v, err=%#v)", tdp.LogPrefix, elemType, size, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadSetBegin",
+		"elemType", elemType,
+		"size", size,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteSetBegin(ctx, elemType, size)
 	}
@@ -357,7 +526,11 @@ func (tdp *TDebugProtocol) ReadSetBegin(ctx context.Context) (elemType TType, si
 }
 func (tdp *TDebugProtocol) ReadSetEnd(ctx context.Context) (err error) {
 	err = tdp.Delegate.ReadSetEnd(ctx)
-	tdp.logf("%sReadSetEnd() err=%#v", tdp.LogPrefix, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadSetEnd",
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteSetEnd(ctx)
 	}
@@ -365,7 +538,12 @@ func (tdp *TDebugProtocol) ReadSetEnd(ctx context.Context) (err error) {
 }
 func (tdp *TDebugProtocol) ReadBool(ctx context.Context) (value bool, err error) {
 	value, err = tdp.Delegate.ReadBool(ctx)
-	tdp.logf("%sReadBool() (value=%#v, err=%#v)", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadBool",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteBool(ctx, value)
 	}
@@ -373,7 +551,12 @@ func (tdp *TDebugProtocol) ReadBool(ctx context.Context) (value bool, err error)
 }
 func (tdp *TDebugProtocol) ReadByte(ctx context.Context) (value int8, err error) {
 	value, err = tdp.Delegate.ReadByte(ctx)
-	tdp.logf("%sReadByte() (value=%#v, err=%#v)", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadByte",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteByte(ctx, value)
 	}
@@ -381,7 +564,12 @@ func (tdp *TDebugProtocol) ReadByte(ctx context.Context) (value int8, err error)
 }
 func (tdp *TDebugProtocol) ReadI16(ctx context.Context) (value int16, err error) {
 	value, err = tdp.Delegate.ReadI16(ctx)
-	tdp.logf("%sReadI16() (value=%#v, err=%#v)", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadI16",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteI16(ctx, value)
 	}
@@ -389,7 +577,12 @@ func (tdp *TDebugProtocol) ReadI16(ctx context.Context) (value int16, err error)
 }
 func (tdp *TDebugProtocol) ReadI32(ctx context.Context) (value int32, err error) {
 	value, err = tdp.Delegate.ReadI32(ctx)
-	tdp.logf("%sReadI32() (value=%#v, err=%#v)", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadI32",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteI32(ctx, value)
 	}
@@ -397,7 +590,12 @@ func (tdp *TDebugProtocol) ReadI32(ctx context.Context) (value int32, err error)
 }
 func (tdp *TDebugProtocol) ReadI64(ctx context.Context) (value int64, err error) {
 	value, err = tdp.Delegate.ReadI64(ctx)
-	tdp.logf("%sReadI64() (value=%#v, err=%#v)", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadI64",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteI64(ctx, value)
 	}
@@ -405,7 +603,12 @@ func (tdp *TDebugProtocol) ReadI64(ctx context.Context) (value int64, err error)
 }
 func (tdp *TDebugProtocol) ReadDouble(ctx context.Context) (value float64, err error) {
 	value, err = tdp.Delegate.ReadDouble(ctx)
-	tdp.logf("%sReadDouble() (value=%#v, err=%#v)", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadDouble",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteDouble(ctx, value)
 	}
@@ -413,7 +616,12 @@ func (tdp *TDebugProtocol) ReadDouble(ctx context.Context) (value float64, err e
 }
 func (tdp *TDebugProtocol) ReadString(ctx context.Context) (value string, err error) {
 	value, err = tdp.Delegate.ReadString(ctx)
-	tdp.logf("%sReadString() (value=%#v, err=%#v)", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadString",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteString(ctx, value)
 	}
@@ -421,7 +629,12 @@ func (tdp *TDebugProtocol) ReadString(ctx context.Context) (value string, err er
 }
 func (tdp *TDebugProtocol) ReadBinary(ctx context.Context) (value []byte, err error) {
 	value, err = tdp.Delegate.ReadBinary(ctx)
-	tdp.logf("%sReadBinary() (value=%#v, err=%#v)", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadBinary",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteBinary(ctx, value)
 	}
@@ -429,7 +642,12 @@ func (tdp *TDebugProtocol) ReadBinary(ctx context.Context) (value []byte, err er
 }
 func (tdp *TDebugProtocol) ReadUUID(ctx context.Context) (value Tuuid, err error) {
 	value, err = tdp.Delegate.ReadUUID(ctx)
-	tdp.logf("%sReadUUID() (value=%#v, err=%#v)", tdp.LogPrefix, value, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"ReadUUID",
+		"value", value,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.WriteUUID(ctx, value)
 	}
@@ -437,7 +655,12 @@ func (tdp *TDebugProtocol) ReadUUID(ctx context.Context) (value Tuuid, err error
 }
 func (tdp *TDebugProtocol) Skip(ctx context.Context, fieldType TType) (err error) {
 	err = tdp.Delegate.Skip(ctx, fieldType)
-	tdp.logf("%sSkip(fieldType=%#v) (err=%#v)", tdp.LogPrefix, fieldType, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"Skip",
+		"fieldType", fieldType,
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.Skip(ctx, fieldType)
 	}
@@ -445,7 +668,11 @@ func (tdp *TDebugProtocol) Skip(ctx context.Context, fieldType TType) (err error
 }
 func (tdp *TDebugProtocol) Flush(ctx context.Context) (err error) {
 	err = tdp.Delegate.Flush(ctx)
-	tdp.logf("%sFlush() (err=%#v)", tdp.LogPrefix, err)
+	slog.DebugContext(
+		ctx,
+		tdp.LogPrefix+"Flush",
+		"err", err,
+	)
 	if tdp.DuplicateTo != nil {
 		tdp.DuplicateTo.Flush(ctx)
 	}
diff --git a/lib/go/thrift/logger.go b/lib/go/thrift/logger.go
index c42aac998..4a0affe62 100644
--- a/lib/go/thrift/logger.go
+++ b/lib/go/thrift/logger.go
@@ -35,14 +35,23 @@ import (
 //
 // See https://issues.apache.org/jira/browse/THRIFT-4985 for the design
 // discussion behind it.
+//
+// Deprecated: This is no longer used by any thrift go library code,
+// will be removed in the future version.
 type Logger func(msg string)
 
 // NopLogger is a Logger implementation that does nothing.
+//
+// Deprecated: This is no longer used by any thrift go library code,
+// will be removed in the future version.
 func NopLogger(msg string) {}
 
 // StdLogger wraps stdlib log package into a Logger.
 //
 // If logger passed in is nil, it will fallback to use stderr and default flags.
+//
+// Deprecated: This is no longer used by any thrift go library code,
+// will be removed in the future version.
 func StdLogger(logger *log.Logger) Logger {
 	if logger == nil {
 		logger = log.New(os.Stderr, "", log.LstdFlags)
@@ -55,6 +64,9 @@ func StdLogger(logger *log.Logger) Logger {
 // TestLogger is a Logger implementation can be used in test codes.
 //
 // It fails the test when being called.
+//
+// Deprecated: This is no longer used by any thrift go library code,
+// will be removed in the future version.
 func TestLogger(tb testing.TB) Logger {
 	return func(msg string) {
 		tb.Errorf("logger called with msg: %q", msg)
diff --git a/lib/go/thrift/simple_server.go b/lib/go/thrift/simple_server.go
index d4f555ccd..a8634fc5f 100644
--- a/lib/go/thrift/simple_server.go
+++ b/lib/go/thrift/simple_server.go
@@ -22,8 +22,8 @@ package thrift
 import (
 	"context"
 	"errors"
-	"fmt"
 	"io"
+	"log/slog"
 	"net"
 	"sync"
 	"sync/atomic"
@@ -70,7 +70,7 @@ type TSimpleServer struct {
 	// Headers to auto forward in THeaderProtocol
 	forwardHeaders []string
 
-	logger Logger
+	logContext atomic.Pointer[context.Context]
 }
 
 func NewTSimpleServer2(processor TProcessor, serverTransport TServerTransport) *TSimpleServer {
@@ -179,8 +179,18 @@ func (p *TSimpleServer) SetForwardHeaders(headers []string) {
 //
 // If no logger was set before Serve is called, a default logger using standard
 // log library will be used.
-func (p *TSimpleServer) SetLogger(logger Logger) {
-	p.logger = logger
+//
+// Deprecated: The logging inside TSimpleServer is now done via slog on error
+// level, this does nothing now. It will be removed in a future version.
+func (p *TSimpleServer) SetLogger(_ Logger) {}
+
+// SetLogContext sets the context to be used when logging errors inside
+// TSimpleServer.
+//
+// If this is not called before calling Serve, context.Background() will be
+// used.
+func (p *TSimpleServer) SetLogContext(ctx context.Context) {
+	p.logContext.Store(&ctx)
 }
 
 func (p *TSimpleServer) innerAccept() (int32, error) {
@@ -202,7 +212,8 @@ func (p *TSimpleServer) innerAccept() (int32, error) {
 			defer p.wg.Done()
 			defer cancel()
 			if err := p.processRequests(client); err != nil {
-				p.logger(fmt.Sprintf("error processing request: %v", err))
+				ctx := p.logContext.Load()
+				slog.ErrorContext(*ctx, "error processing request", "err", err)
 			}
 		}()
 
@@ -233,7 +244,7 @@ func (p *TSimpleServer) AcceptLoop() error {
 }
 
 func (p *TSimpleServer) Serve() error {
-	p.logger = fallbackLogger(p.logger)
+	p.logContext.CompareAndSwap(nil, Pointer(context.Background()))
 
 	err := p.Listen()
 	if err != nil {
diff --git a/test/go/go.mod b/test/go/go.mod
index 723069b78..f69cdb443 100644
--- a/test/go/go.mod
+++ b/test/go/go.mod
@@ -1,6 +1,6 @@
 module github.com/apache/thrift/test/go
 
-go 1.20
+go 1.21
 
 require (
 	github.com/apache/thrift v0.0.0-00010101000000-000000000000
@@ -9,7 +9,7 @@ require (
 
 require (
 	golang.org/x/mod v0.4.2 // indirect
-	golang.org/x/sys v0.7.0 // indirect
+	golang.org/x/sys v0.0.0-20210510120138-977fb7262007 // indirect
 	golang.org/x/tools v0.1.1 // indirect
 	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
 )
diff --git a/test/go/go.sum b/test/go/go.sum
index b6ad5455e..6904b3efe 100644
--- a/test/go/go.sum
+++ b/test/go/go.sum
@@ -16,8 +16,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE=
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
-golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=