在使用ContainerLogs方法时,可以设置参数来指定日志的类型。例如,可以设置参数type为"stdout"或"stderr"来获取相应类型的日志信息。具体代码如下:

ctx := context.Background()
cli, err := client.NewClientWithOpts(client.FromEnv)
if err != nil {
    panic(err)
}

containerID := "your_container_id"

options := types.ContainerLogsOptions{
    ShowStdout: true,
    ShowStderr: true,
    Timestamps: true,
    Tail:       "100", // 只获取最后100行日志
    Follow:     false,
}

stdoutLogs, err := cli.ContainerLogs(ctx, containerID, options)
if err != nil {
    panic(err)
}
defer stdoutLogs.Close()

// 读取stdout日志信息
stdoutReader := bufio.NewReader(stdoutLogs)
for {
    line, err := stdoutReader.ReadBytes('\n')
    if err != nil {
        if err == io.EOF {
            break
        }
        panic(err)
    }
    // 处理stdout日志信息
    fmt.Printf("stdout: %s", line)
}

options.ShowStdout = false
options.ShowStderr = true

stderrLogs, err := cli.ContainerLogs(ctx, containerID, options)
if err != nil {
    panic(err)
}
defer stderrLogs.Close()

// 读取stderr日志信息
stderrReader := bufio.NewReader(stderrLogs)
for {
    line, err := stderrReader.ReadBytes('\n')
    if err != nil {
        if err == io.EOF {
            break
        }
        panic(err)
    }
    // 处理stderr日志信息
    fmt.Printf("stderr: %s", line)
}

在上面的代码中,我们设置了ShowStdout和ShowStderr参数来指定要获取的日志类型。然后分别获取stdout和stderr类型的日志信息,并通过读取日志信息的方式来处理日志

我需要用golang调用docker sdk的ContainerLogs方法返回日志信息可是返回的日志信息只有message消息和timestamp还需要显示这条消息是stdout还是stderr如何解决

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

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