Golang Docker SDK ContainerLogs方法获取日志信息并区分stdout/stderr
在使用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日志信息,可以方便地对不同类型的日志进行处理。
原文地址: https://www.cveoy.top/t/topic/kNmv 著作权归作者所有。请勿转载和采集!