Skip to content

Commit 3bb7d4e

Browse files
geniusjoeCopilot
andauthored
docs: Update example, using slog as the default logger (#1449)
Co-authored-by: Copilot <[email protected]>
1 parent 9d65d0e commit 3bb7d4e

File tree

6 files changed

+135
-45
lines changed

6 files changed

+135
-45
lines changed

examples/consumer-listener/consumer-listener.go

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,45 +18,65 @@
1818
package main
1919

2020
import (
21-
"fmt"
22-
"log"
21+
"io"
22+
"log/slog"
23+
"os"
2324

2425
"github.com/apache/pulsar-client-go/pulsar"
26+
pulsarlog "github.com/apache/pulsar-client-go/pulsar/log"
27+
"gopkg.in/natefinch/lumberjack.v2"
2528
)
2629

2730
func main() {
28-
client, err := pulsar.NewClient(pulsar.ClientOptions{URL: "pulsar://localhost:6650"})
29-
if err != nil {
30-
log.Fatal(err)
31+
fileLogger := &lumberjack.Logger{
32+
Filename: "/tmp/pulsar-go-sdk.log",
33+
MaxSize: 100,
34+
MaxBackups: 5,
35+
LocalTime: true,
3136
}
37+
// this multiLogger prints logs to both stdout and fileLogger
38+
// if we only want to print logs to file, just pass fileLogger to slog.NewJSONHandler()
39+
multiLogger := io.MultiWriter(os.Stdout, fileLogger)
40+
logger := slog.New(slog.NewJSONHandler(multiLogger, &slog.HandlerOptions{Level: slog.LevelInfo}))
41+
slog.SetDefault(logger)
3242

43+
client, err := pulsar.NewClient(pulsar.ClientOptions{
44+
URL: "pulsar://localhost:6650",
45+
// If we are using a logrus logger or other third-party custom loggers,
46+
// we can skip the above slog logger initialization and pass the logger with its corresponding wrapper here.
47+
Logger: pulsarlog.NewLoggerWithSlog(logger),
48+
})
49+
if err != nil {
50+
logger.Error("create client err", "error", err)
51+
return
52+
}
3353
defer client.Close()
3454

3555
channel := make(chan pulsar.ConsumerMessage, 100)
36-
3756
options := pulsar.ConsumerOptions{
3857
Topic: "topic-1",
3958
SubscriptionName: "my-subscription",
4059
Type: pulsar.Shared,
4160
}
42-
4361
options.MessageChannel = channel
44-
4562
consumer, err := client.Subscribe(options)
4663
if err != nil {
47-
log.Fatal(err)
64+
logger.Error("create consumer err", "error", err)
65+
return
4866
}
49-
5067
defer consumer.Close()
5168

5269
// Receive messages from channel. The channel returns a struct which contains message and the consumer from where
5370
// the message was received. It's not necessary here since we have 1 single consumer, but the channel could be
5471
// shared across multiple consumers as well
5572
for cm := range channel {
5673
msg := cm.Message
57-
fmt.Printf("Received message msgId: %v -- content: '%s'\n",
58-
msg.ID(), string(msg.Payload()))
59-
74+
logger.Info("Received message",
75+
"msgId",
76+
msg.ID().String(),
77+
"content",
78+
string(msg.Payload()),
79+
)
6080
consumer.Ack(msg)
6181
}
6282
}

examples/consumer/consumer.go

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,38 @@ package main
1919

2020
import (
2121
"context"
22-
"fmt"
23-
"log"
22+
"io"
23+
"log/slog"
24+
"os"
2425

2526
"github.com/apache/pulsar-client-go/pulsar"
27+
pulsarlog "github.com/apache/pulsar-client-go/pulsar/log"
28+
"gopkg.in/natefinch/lumberjack.v2"
2629
)
2730

2831
func main() {
29-
client, err := pulsar.NewClient(pulsar.ClientOptions{URL: "pulsar://localhost:6650"})
30-
if err != nil {
31-
log.Fatal(err)
32+
fileLogger := &lumberjack.Logger{
33+
Filename: "/tmp/pulsar-go-sdk.log",
34+
MaxSize: 100,
35+
MaxBackups: 5,
36+
LocalTime: true,
3237
}
38+
// this multiLogger prints logs to both stdout and fileLogger
39+
// if we only want to print logs to file, just pass fileLogger to slog.NewJSONHandler()
40+
multiLogger := io.MultiWriter(os.Stdout, fileLogger)
41+
logger := slog.New(slog.NewJSONHandler(multiLogger, &slog.HandlerOptions{Level: slog.LevelInfo}))
42+
slog.SetDefault(logger)
3343

44+
client, err := pulsar.NewClient(pulsar.ClientOptions{
45+
URL: "pulsar://localhost:6650",
46+
// If we are using a logrus logger or other third-party custom loggers,
47+
// we can skip the above slog logger initialization and pass the logger with its corresponding wrapper here.
48+
Logger: pulsarlog.NewLoggerWithSlog(logger),
49+
})
50+
if err != nil {
51+
logger.Error("create client err", "error", err)
52+
return
53+
}
3454
defer client.Close()
3555

3656
consumer, err := client.Subscribe(pulsar.ConsumerOptions{
@@ -39,23 +59,27 @@ func main() {
3959
Type: pulsar.Shared,
4060
})
4161
if err != nil {
42-
log.Fatal(err)
62+
logger.Error("create consumer err", "error", err)
63+
return
4364
}
4465
defer consumer.Close()
4566

4667
for i := 0; i < 10; i++ {
4768
msg, err := consumer.Receive(context.Background())
4869
if err != nil {
49-
log.Fatal(err)
70+
logger.Error("consumer receive message err", "error", err)
71+
return
5072
}
51-
52-
fmt.Printf("Received message msgId: %#v -- content: '%s'\n",
53-
msg.ID(), string(msg.Payload()))
54-
73+
logger.Info("Received message",
74+
"msgId",
75+
msg.ID().String(),
76+
"content",
77+
string(msg.Payload()),
78+
)
5579
consumer.Ack(msg)
5680
}
57-
5881
if err := consumer.Unsubscribe(); err != nil {
59-
log.Fatal(err)
82+
logger.Error("consumer unsubscribe err", "error", err)
83+
return
6084
}
6185
}

examples/producer/producer.go

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,40 +20,58 @@ package main
2020
import (
2121
"context"
2222
"fmt"
23-
"log"
23+
"io"
24+
"log/slog"
25+
"os"
2426

2527
"github.com/apache/pulsar-client-go/pulsar"
28+
pulsarlog "github.com/apache/pulsar-client-go/pulsar/log"
29+
"gopkg.in/natefinch/lumberjack.v2"
2630
)
2731

2832
func main() {
33+
fileLogger := &lumberjack.Logger{
34+
Filename: "/tmp/pulsar-go-sdk.log",
35+
MaxSize: 100,
36+
MaxBackups: 5,
37+
LocalTime: true,
38+
}
39+
// this multiLogger prints logs to both stdout and fileLogger
40+
// if we only want to print logs to file, just pass fileLogger to slog.NewJSONHandler()
41+
multiLogger := io.MultiWriter(os.Stdout, fileLogger)
42+
logger := slog.New(slog.NewJSONHandler(multiLogger, &slog.HandlerOptions{Level: slog.LevelInfo}))
43+
slog.SetDefault(logger)
44+
2945
client, err := pulsar.NewClient(pulsar.ClientOptions{
3046
URL: "pulsar://localhost:6650",
47+
// If we are using a logrus logger or other third-party custom loggers,
48+
// we can skip the above slog logger initialization and pass the logger with its corresponding wrapper here.
49+
Logger: pulsarlog.NewLoggerWithSlog(logger),
3150
})
32-
3351
if err != nil {
34-
log.Fatal(err)
52+
logger.Error("create client err", "error", err)
53+
return
3554
}
36-
3755
defer client.Close()
3856

3957
producer, err := client.CreateProducer(pulsar.ProducerOptions{
4058
Topic: "topic-1",
4159
})
4260
if err != nil {
43-
log.Fatal(err)
61+
logger.Error("create producer err", "error", err)
62+
return
4463
}
45-
4664
defer producer.Close()
4765

4866
ctx := context.Background()
49-
5067
for i := 0; i < 10; i++ {
5168
if msgId, err := producer.Send(ctx, &pulsar.ProducerMessage{
5269
Payload: []byte(fmt.Sprintf("hello-%d", i)),
5370
}); err != nil {
54-
log.Fatal(err)
71+
logger.Error("send message error", "error", err)
72+
return
5573
} else {
56-
log.Println("Published message: ", msgId)
74+
logger.Info("Published message", "msgId", msgId.String())
5775
}
5876
}
5977
}

examples/reader/reader.go

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,36 +19,61 @@ package main
1919

2020
import (
2121
"context"
22-
"fmt"
23-
"log"
22+
"io"
23+
"log/slog"
24+
"os"
2425

2526
"github.com/apache/pulsar-client-go/pulsar"
27+
pulsarlog "github.com/apache/pulsar-client-go/pulsar/log"
28+
"gopkg.in/natefinch/lumberjack.v2"
2629
)
2730

2831
func main() {
29-
client, err := pulsar.NewClient(pulsar.ClientOptions{URL: "pulsar://localhost:6650"})
30-
if err != nil {
31-
log.Fatal(err)
32+
fileLogger := &lumberjack.Logger{
33+
Filename: "/tmp/pulsar-go-sdk.log",
34+
MaxSize: 100,
35+
MaxBackups: 5,
36+
LocalTime: true,
3237
}
38+
// this multiLogger prints logs to both stdout and fileLogger
39+
// if we only want to print logs to file, just pass fileLogger to slog.NewJSONHandler()
40+
multiLogger := io.MultiWriter(os.Stdout, fileLogger)
41+
logger := slog.New(slog.NewJSONHandler(multiLogger, &slog.HandlerOptions{Level: slog.LevelInfo}))
42+
slog.SetDefault(logger)
3343

44+
client, err := pulsar.NewClient(pulsar.ClientOptions{
45+
URL: "pulsar://localhost:6650",
46+
// If we are using a logrus logger or other third-party custom loggers,
47+
// we can skip the above slog logger initialization and pass the logger with its corresponding wrapper here.
48+
Logger: pulsarlog.NewLoggerWithSlog(logger),
49+
})
50+
if err != nil {
51+
logger.Error("create client err", "error", err)
52+
return
53+
}
3454
defer client.Close()
3555

3656
reader, err := client.CreateReader(pulsar.ReaderOptions{
3757
Topic: "topic-1",
3858
StartMessageID: pulsar.EarliestMessageID(),
3959
})
4060
if err != nil {
41-
log.Fatal(err)
61+
logger.Error("create reader err", "error", err)
62+
return
4263
}
4364
defer reader.Close()
4465

4566
for reader.HasNext() {
4667
msg, err := reader.Next(context.Background())
4768
if err != nil {
48-
log.Fatal(err)
69+
logger.Error("reader receive message err", "error", err)
70+
return
4971
}
50-
51-
fmt.Printf("Received message msgId: %#v -- content: '%s'\n",
52-
msg.ID(), string(msg.Payload()))
72+
logger.Info("Received message",
73+
"msgId",
74+
msg.ID().String(),
75+
"content",
76+
string(msg.Payload()),
77+
)
5378
}
5479
}

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ require (
3434
golang.org/x/oauth2 v0.28.0
3535
golang.org/x/time v0.10.0
3636
google.golang.org/protobuf v1.36.5
37+
gopkg.in/natefinch/lumberjack.v2 v2.2.1
3738
)
3839

3940
require (

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV
346346
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
347347
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
348348
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
349+
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
350+
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
349351
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
350352
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
351353
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

0 commit comments

Comments
 (0)