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=

Reply via email to