测试来自 GitHub.com/Shopify/sarama 的日志输出
Testing log output from GitHub.com/Shopify/sarama
我正在尝试为配置 github.com/Shopify/sarama
的 Logger
的功能选项编写单元测试。 运行像这样用 Kafka 创建一个 Docker 容器后,
docker run -p 2181:2181 -p 9092:9092 -e ADVERTISED_HOST=127.0.0.1 -e NUM_PARTITIONS=10 johnnypark/kafka-zookeeper
我正在尝试 运行 这个程序:
package main
import (
"bufio"
"bytes"
"io/ioutil"
"log"
"github.com/Shopify/sarama"
)
func main() {
var b bytes.Buffer
out := bufio.NewWriter(&b)
sarama.Logger = log.New(out, "[Sarama] ", log.LstdFlags)
if _, err := sarama.NewClient([]string{"localhost:9092"}, sarama.NewConfig()); err != nil {
log.Fatalln("NewClient:", err)
}
output, err := ioutil.ReadAll(&b)
if err != nil {
log.Fatalln("ReadAll:", err)
}
log.Printf("output: %s", output)
}
我希望看到一些输出。但是,打印输出为空:
> go run main.go
2020/09/25 16:44:58 output:
相比之下,如果我将输出设置为 os.Stderr
,
package main
import (
"log"
"os"
"github.com/Shopify/sarama"
)
func main() {
sarama.Logger = log.New(os.Stderr, "[Sarama] ", log.LstdFlags)
if _, err := sarama.NewClient([]string{"localhost:9092"}, sarama.NewConfig()); err != nil {
log.Fatalln("NewClient:", err)
}
}
我看到打印到终端的预期输出:
> go run main.go
[Sarama] 2020/09/25 16:46:04 Initializing new client
[Sarama] 2020/09/25 16:46:04 ClientID is the default of 'sarama', you should consider setting it to something application-specific.
[Sarama] 2020/09/25 16:46:04 ClientID is the default of 'sarama', you should consider setting it to something application-specific.
[Sarama] 2020/09/25 16:46:04 client/metadata fetching metadata for all topics from broker localhost:9092
[Sarama] 2020/09/25 16:46:04 Connected to broker at localhost:9092 (unregistered)
[Sarama] 2020/09/25 16:46:04 client/brokers registered new broker #0 at 127.0.0.1:9092
[Sarama] 2020/09/25 16:46:04 Successfully initialized new client
似乎 *bytes.Buffer
没有被 ioutil.ReadAll()
得到 'flushed'?我怎样才能修正前面的例子,使 output
不为空?
原来我只需要打电话
out.Flush()
在 ioutil.ReadAll()
之前。现在输出符合预期:
> go run main.go
2020/09/25 16:58:26 output: [Sarama] 2020/09/25 16:58:26 Initializing new client
[Sarama] 2020/09/25 16:58:26 ClientID is the default of 'sarama', you should consider setting it to something application-specific.
[Sarama] 2020/09/25 16:58:26 ClientID is the default of 'sarama', you should consider setting it to something application-specific.
[Sarama] 2020/09/25 16:58:26 client/metadata fetching metadata for all topics from broker localhost:9092
[Sarama] 2020/09/25 16:58:26 Connected to broker at localhost:9092 (unregistered)
[Sarama] 2020/09/25 16:58:26 client/brokers registered new broker #0 at 127.0.0.1:9092
[Sarama] 2020/09/25 16:58:26 Successfully initialized new client
我正在尝试为配置 github.com/Shopify/sarama
的 Logger
的功能选项编写单元测试。 运行像这样用 Kafka 创建一个 Docker 容器后,
docker run -p 2181:2181 -p 9092:9092 -e ADVERTISED_HOST=127.0.0.1 -e NUM_PARTITIONS=10 johnnypark/kafka-zookeeper
我正在尝试 运行 这个程序:
package main
import (
"bufio"
"bytes"
"io/ioutil"
"log"
"github.com/Shopify/sarama"
)
func main() {
var b bytes.Buffer
out := bufio.NewWriter(&b)
sarama.Logger = log.New(out, "[Sarama] ", log.LstdFlags)
if _, err := sarama.NewClient([]string{"localhost:9092"}, sarama.NewConfig()); err != nil {
log.Fatalln("NewClient:", err)
}
output, err := ioutil.ReadAll(&b)
if err != nil {
log.Fatalln("ReadAll:", err)
}
log.Printf("output: %s", output)
}
我希望看到一些输出。但是,打印输出为空:
> go run main.go
2020/09/25 16:44:58 output:
相比之下,如果我将输出设置为 os.Stderr
,
package main
import (
"log"
"os"
"github.com/Shopify/sarama"
)
func main() {
sarama.Logger = log.New(os.Stderr, "[Sarama] ", log.LstdFlags)
if _, err := sarama.NewClient([]string{"localhost:9092"}, sarama.NewConfig()); err != nil {
log.Fatalln("NewClient:", err)
}
}
我看到打印到终端的预期输出:
> go run main.go
[Sarama] 2020/09/25 16:46:04 Initializing new client
[Sarama] 2020/09/25 16:46:04 ClientID is the default of 'sarama', you should consider setting it to something application-specific.
[Sarama] 2020/09/25 16:46:04 ClientID is the default of 'sarama', you should consider setting it to something application-specific.
[Sarama] 2020/09/25 16:46:04 client/metadata fetching metadata for all topics from broker localhost:9092
[Sarama] 2020/09/25 16:46:04 Connected to broker at localhost:9092 (unregistered)
[Sarama] 2020/09/25 16:46:04 client/brokers registered new broker #0 at 127.0.0.1:9092
[Sarama] 2020/09/25 16:46:04 Successfully initialized new client
似乎 *bytes.Buffer
没有被 ioutil.ReadAll()
得到 'flushed'?我怎样才能修正前面的例子,使 output
不为空?
原来我只需要打电话
out.Flush()
在 ioutil.ReadAll()
之前。现在输出符合预期:
> go run main.go
2020/09/25 16:58:26 output: [Sarama] 2020/09/25 16:58:26 Initializing new client
[Sarama] 2020/09/25 16:58:26 ClientID is the default of 'sarama', you should consider setting it to something application-specific.
[Sarama] 2020/09/25 16:58:26 ClientID is the default of 'sarama', you should consider setting it to something application-specific.
[Sarama] 2020/09/25 16:58:26 client/metadata fetching metadata for all topics from broker localhost:9092
[Sarama] 2020/09/25 16:58:26 Connected to broker at localhost:9092 (unregistered)
[Sarama] 2020/09/25 16:58:26 client/brokers registered new broker #0 at 127.0.0.1:9092
[Sarama] 2020/09/25 16:58:26 Successfully initialized new client