在使用Docker SDK的ContainerLogs方法获取容器日志信息时,需要区分日志信息来源,例如stdout和stderr。可以使用参数来指定要获取的日志类型。

以下代码示例展示了如何设置参数获取并区分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类型的日志信息。然后使用bufio.NewReader读取日志信息并进行处理。

通过设置参数并分别读取stdout和stderr日志信息,可以方便地对不同类型的日志进行处理。

Golang Docker SDK ContainerLogs方法获取日志信息并区分stdout/stderr

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

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