您正在尝试使用 Golang 的 Docker SDK 中的 ContainerLogs 方法获取容器日志,但发现返回的日志信息只包含 messagetimestamp 两列,而缺少 stream 信息?这可能是因为您没有正确配置 types.ContainerLogsOptions 参数。

为了获取完整的日志信息,您需要使用 types.ContainerLogsOptions 参数中的 types.ContainerLogsOptions.Stream 选项来请求实时日志流。以下是一个示例代码:

package main

import (
	"context"
	"fmt"
	"io"
	"time"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/client"
)

func main() {
	cli, err := client.NewEnvClient()
	if err != nil {
		panic(err)
	}

	options := types.ContainerLogsOptions{
		Follow:    true,
		ShowStdout: true,
		ShowStderr: true,
		Timestamps: true,
		Stream:     true, // 关键选项,请求实时日志流
	}

	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()

	reader, err := cli.ContainerLogs(ctx, "my-container-id", options)
	if err != nil {
		panic(err)
	}

	defer reader.Close()

	buf := make([]byte, 4096)
	for {
		n, err := reader.Read(buf)
		if err != nil {
			if err == io.EOF {
				break
			}
			panic(err)
		}
		fmt.Print(string(buf[:n]))
	}
}

在这个代码中,我们使用 types.ContainerLogsOptions 结构体配置日志选项,并使用 cli.ContainerLogs 方法获取日志流。然后,我们使用 io.Reader 接口读取日志流并将其打印到控制台。请注意,options.Stream 选项设置为 true 来请求实时日志流。如果您不需要实时日志流,可以将其设置为 false

通过使用 types.ContainerLogsOptions.Stream 选项,您将能够获取完整的容器日志信息,包括 messagetimestampstream 信息。

Golang Docker SDK ContainerLogs 获取完整日志信息

原文地址: https://www.cveoy.top/t/topic/kNl2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录