This is an automated email from the ASF dual-hosted git repository.
crossoverjie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar-client-go.git
The following commit(s) were added to refs/heads/master by this push:
new 3bb7d4ef docs: Update example, using slog as the default logger (#1449)
3bb7d4ef is described below
commit 3bb7d4eff361a35df6641f13d101093c68c1ec27
Author: zhou zhuohan <[email protected]>
AuthorDate: Mon Dec 22 11:01:02 2025 +0800
docs: Update example, using slog as the default logger (#1449)
Co-authored-by: Copilot <[email protected]>
---
examples/consumer-listener/consumer-listener.go | 46 ++++++++++++++++-------
examples/consumer/consumer.go | 50 ++++++++++++++++++-------
examples/producer/producer.go | 36 +++++++++++++-----
examples/reader/reader.go | 45 +++++++++++++++++-----
go.mod | 1 +
go.sum | 2 +
6 files changed, 135 insertions(+), 45 deletions(-)
diff --git a/examples/consumer-listener/consumer-listener.go
b/examples/consumer-listener/consumer-listener.go
index 618c3c0b..eca67199 100644
--- a/examples/consumer-listener/consumer-listener.go
+++ b/examples/consumer-listener/consumer-listener.go
@@ -18,35 +18,52 @@
package main
import (
- "fmt"
- "log"
+ "io"
+ "log/slog"
+ "os"
"github.com/apache/pulsar-client-go/pulsar"
+ pulsarlog "github.com/apache/pulsar-client-go/pulsar/log"
+ "gopkg.in/natefinch/lumberjack.v2"
)
func main() {
- client, err := pulsar.NewClient(pulsar.ClientOptions{URL:
"pulsar://localhost:6650"})
- if err != nil {
- log.Fatal(err)
+ fileLogger := &lumberjack.Logger{
+ Filename: "/tmp/pulsar-go-sdk.log",
+ MaxSize: 100,
+ MaxBackups: 5,
+ LocalTime: true,
}
+ // this multiLogger prints logs to both stdout and fileLogger
+ // if we only want to print logs to file, just pass fileLogger to
slog.NewJSONHandler()
+ multiLogger := io.MultiWriter(os.Stdout, fileLogger)
+ logger := slog.New(slog.NewJSONHandler(multiLogger,
&slog.HandlerOptions{Level: slog.LevelInfo}))
+ slog.SetDefault(logger)
+ client, err := pulsar.NewClient(pulsar.ClientOptions{
+ URL: "pulsar://localhost:6650",
+ // If we are using a logrus logger or other third-party custom
loggers,
+ // we can skip the above slog logger initialization and pass
the logger with its corresponding wrapper here.
+ Logger: pulsarlog.NewLoggerWithSlog(logger),
+ })
+ if err != nil {
+ logger.Error("create client err", "error", err)
+ return
+ }
defer client.Close()
channel := make(chan pulsar.ConsumerMessage, 100)
-
options := pulsar.ConsumerOptions{
Topic: "topic-1",
SubscriptionName: "my-subscription",
Type: pulsar.Shared,
}
-
options.MessageChannel = channel
-
consumer, err := client.Subscribe(options)
if err != nil {
- log.Fatal(err)
+ logger.Error("create consumer err", "error", err)
+ return
}
-
defer consumer.Close()
// Receive messages from channel. The channel returns a struct which
contains message and the consumer from where
@@ -54,9 +71,12 @@ func main() {
// shared across multiple consumers as well
for cm := range channel {
msg := cm.Message
- fmt.Printf("Received message msgId: %v -- content: '%s'\n",
- msg.ID(), string(msg.Payload()))
-
+ logger.Info("Received message",
+ "msgId",
+ msg.ID().String(),
+ "content",
+ string(msg.Payload()),
+ )
consumer.Ack(msg)
}
}
diff --git a/examples/consumer/consumer.go b/examples/consumer/consumer.go
index 0b819bcb..86d9ef9b 100644
--- a/examples/consumer/consumer.go
+++ b/examples/consumer/consumer.go
@@ -19,18 +19,38 @@ package main
import (
"context"
- "fmt"
- "log"
+ "io"
+ "log/slog"
+ "os"
"github.com/apache/pulsar-client-go/pulsar"
+ pulsarlog "github.com/apache/pulsar-client-go/pulsar/log"
+ "gopkg.in/natefinch/lumberjack.v2"
)
func main() {
- client, err := pulsar.NewClient(pulsar.ClientOptions{URL:
"pulsar://localhost:6650"})
- if err != nil {
- log.Fatal(err)
+ fileLogger := &lumberjack.Logger{
+ Filename: "/tmp/pulsar-go-sdk.log",
+ MaxSize: 100,
+ MaxBackups: 5,
+ LocalTime: true,
}
+ // this multiLogger prints logs to both stdout and fileLogger
+ // if we only want to print logs to file, just pass fileLogger to
slog.NewJSONHandler()
+ multiLogger := io.MultiWriter(os.Stdout, fileLogger)
+ logger := slog.New(slog.NewJSONHandler(multiLogger,
&slog.HandlerOptions{Level: slog.LevelInfo}))
+ slog.SetDefault(logger)
+ client, err := pulsar.NewClient(pulsar.ClientOptions{
+ URL: "pulsar://localhost:6650",
+ // If we are using a logrus logger or other third-party custom
loggers,
+ // we can skip the above slog logger initialization and pass
the logger with its corresponding wrapper here.
+ Logger: pulsarlog.NewLoggerWithSlog(logger),
+ })
+ if err != nil {
+ logger.Error("create client err", "error", err)
+ return
+ }
defer client.Close()
consumer, err := client.Subscribe(pulsar.ConsumerOptions{
@@ -39,23 +59,27 @@ func main() {
Type: pulsar.Shared,
})
if err != nil {
- log.Fatal(err)
+ logger.Error("create consumer err", "error", err)
+ return
}
defer consumer.Close()
for i := 0; i < 10; i++ {
msg, err := consumer.Receive(context.Background())
if err != nil {
- log.Fatal(err)
+ logger.Error("consumer receive message err", "error",
err)
+ return
}
-
- fmt.Printf("Received message msgId: %#v -- content: '%s'\n",
- msg.ID(), string(msg.Payload()))
-
+ logger.Info("Received message",
+ "msgId",
+ msg.ID().String(),
+ "content",
+ string(msg.Payload()),
+ )
consumer.Ack(msg)
}
-
if err := consumer.Unsubscribe(); err != nil {
- log.Fatal(err)
+ logger.Error("consumer unsubscribe err", "error", err)
+ return
}
}
diff --git a/examples/producer/producer.go b/examples/producer/producer.go
index 770aa83c..802e89b2 100644
--- a/examples/producer/producer.go
+++ b/examples/producer/producer.go
@@ -20,40 +20,58 @@ package main
import (
"context"
"fmt"
- "log"
+ "io"
+ "log/slog"
+ "os"
"github.com/apache/pulsar-client-go/pulsar"
+ pulsarlog "github.com/apache/pulsar-client-go/pulsar/log"
+ "gopkg.in/natefinch/lumberjack.v2"
)
func main() {
+ fileLogger := &lumberjack.Logger{
+ Filename: "/tmp/pulsar-go-sdk.log",
+ MaxSize: 100,
+ MaxBackups: 5,
+ LocalTime: true,
+ }
+ // this multiLogger prints logs to both stdout and fileLogger
+ // if we only want to print logs to file, just pass fileLogger to
slog.NewJSONHandler()
+ multiLogger := io.MultiWriter(os.Stdout, fileLogger)
+ logger := slog.New(slog.NewJSONHandler(multiLogger,
&slog.HandlerOptions{Level: slog.LevelInfo}))
+ slog.SetDefault(logger)
+
client, err := pulsar.NewClient(pulsar.ClientOptions{
URL: "pulsar://localhost:6650",
+ // If we are using a logrus logger or other third-party custom
loggers,
+ // we can skip the above slog logger initialization and pass
the logger with its corresponding wrapper here.
+ Logger: pulsarlog.NewLoggerWithSlog(logger),
})
-
if err != nil {
- log.Fatal(err)
+ logger.Error("create client err", "error", err)
+ return
}
-
defer client.Close()
producer, err := client.CreateProducer(pulsar.ProducerOptions{
Topic: "topic-1",
})
if err != nil {
- log.Fatal(err)
+ logger.Error("create producer err", "error", err)
+ return
}
-
defer producer.Close()
ctx := context.Background()
-
for i := 0; i < 10; i++ {
if msgId, err := producer.Send(ctx, &pulsar.ProducerMessage{
Payload: []byte(fmt.Sprintf("hello-%d", i)),
}); err != nil {
- log.Fatal(err)
+ logger.Error("send message error", "error", err)
+ return
} else {
- log.Println("Published message: ", msgId)
+ logger.Info("Published message", "msgId",
msgId.String())
}
}
}
diff --git a/examples/reader/reader.go b/examples/reader/reader.go
index aae37cdd..261627b5 100644
--- a/examples/reader/reader.go
+++ b/examples/reader/reader.go
@@ -19,18 +19,38 @@ package main
import (
"context"
- "fmt"
- "log"
+ "io"
+ "log/slog"
+ "os"
"github.com/apache/pulsar-client-go/pulsar"
+ pulsarlog "github.com/apache/pulsar-client-go/pulsar/log"
+ "gopkg.in/natefinch/lumberjack.v2"
)
func main() {
- client, err := pulsar.NewClient(pulsar.ClientOptions{URL:
"pulsar://localhost:6650"})
- if err != nil {
- log.Fatal(err)
+ fileLogger := &lumberjack.Logger{
+ Filename: "/tmp/pulsar-go-sdk.log",
+ MaxSize: 100,
+ MaxBackups: 5,
+ LocalTime: true,
}
+ // this multiLogger prints logs to both stdout and fileLogger
+ // if we only want to print logs to file, just pass fileLogger to
slog.NewJSONHandler()
+ multiLogger := io.MultiWriter(os.Stdout, fileLogger)
+ logger := slog.New(slog.NewJSONHandler(multiLogger,
&slog.HandlerOptions{Level: slog.LevelInfo}))
+ slog.SetDefault(logger)
+ client, err := pulsar.NewClient(pulsar.ClientOptions{
+ URL: "pulsar://localhost:6650",
+ // If we are using a logrus logger or other third-party custom
loggers,
+ // we can skip the above slog logger initialization and pass
the logger with its corresponding wrapper here.
+ Logger: pulsarlog.NewLoggerWithSlog(logger),
+ })
+ if err != nil {
+ logger.Error("create client err", "error", err)
+ return
+ }
defer client.Close()
reader, err := client.CreateReader(pulsar.ReaderOptions{
@@ -38,17 +58,22 @@ func main() {
StartMessageID: pulsar.EarliestMessageID(),
})
if err != nil {
- log.Fatal(err)
+ logger.Error("create reader err", "error", err)
+ return
}
defer reader.Close()
for reader.HasNext() {
msg, err := reader.Next(context.Background())
if err != nil {
- log.Fatal(err)
+ logger.Error("reader receive message err", "error", err)
+ return
}
-
- fmt.Printf("Received message msgId: %#v -- content: '%s'\n",
- msg.ID(), string(msg.Payload()))
+ logger.Info("Received message",
+ "msgId",
+ msg.ID().String(),
+ "content",
+ string(msg.Payload()),
+ )
}
}
diff --git a/go.mod b/go.mod
index 7d8e46c8..f0f4c52c 100644
--- a/go.mod
+++ b/go.mod
@@ -34,6 +34,7 @@ require (
golang.org/x/oauth2 v0.28.0
golang.org/x/time v0.10.0
google.golang.org/protobuf v1.36.5
+ gopkg.in/natefinch/lumberjack.v2 v2.2.1
)
require (
diff --git a/go.sum b/go.sum
index 37fe2531..f92466ce 100644
--- a/go.sum
+++ b/go.sum
@@ -346,6 +346,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod
h1:JHkPIbrfpd72SG/EV
gopkg.in/fsnotify.v1 v1.4.7/go.mod
h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/natefinch/lumberjack.v2 v2.2.1
h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
+gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod
h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod
h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=