本文整理汇总了Golang中github.com/fsouza/go-dockerclient.LogsOptions.ErrorStream方法的典型用法代码示例。如果您正苦于以下问题:Golang LogsOptions.ErrorStream方法的具体用法?Golang LogsOptions.ErrorStream怎么用?Golang LogsOptions.ErrorStream使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/fsouza/go-dockerclient.LogsOptions
的用法示例。
在下文中一共展示了LogsOptions.ErrorStream方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Handle
func (l *LogsHandler) Handle(key string, initialMessage string, incomingMessages <-chan string, response chan<- common.Message) {
defer backend.SignalHandlerClosed(key, response)
requestUrl, err := url.Parse(initialMessage)
if err != nil {
log.WithFields(log.Fields{"error": err, "url": initialMessage}).Error("Couldn't parse url.")
return
}
tokenString := requestUrl.Query().Get("token")
token, valid := auth.GetAndCheckToken(tokenString)
if !valid {
return
}
logs := token.Claims["logs"].(map[string]interface{})
container := logs["Container"].(string)
follow, found := logs["Follow"].(bool)
if !found {
follow = true
}
tailTemp, found := logs["Lines"].(int)
var tail string
if found {
tail = strconv.Itoa(int(tailTemp))
} else {
tail = "100"
}
client, err := events.NewDockerClient()
if err != nil {
log.WithFields(log.Fields{"error": err}).Error("Couldn't get docker client.")
return
}
reader, writer := io.Pipe()
containerRef, err := client.InspectContainer(container)
if err != nil {
return
}
logopts := dockerClient.LogsOptions{
Container: container,
Follow: follow,
Stdout: true,
Stderr: true,
Timestamps: true,
Tail: tail,
}
if containerRef.Config.Tty {
logopts.OutputStream = stdbothWriter{writer}
logopts.RawTerminal = true
} else {
logopts.OutputStream = stdoutWriter{writer}
logopts.ErrorStream = stderrorWriter{writer}
logopts.RawTerminal = false
}
go func(w *io.PipeWriter) {
for {
_, ok := <-incomingMessages
if !ok {
w.Close()
return
}
}
}(writer)
go func(r *io.PipeReader) {
scanner := bufio.NewScanner(r)
scanner.Split(customSplit)
for scanner.Scan() {
text := scanner.Text()
message := common.Message{
Key: key,
Type: common.Body,
Body: text,
}
response <- message
}
if err := scanner.Err(); err != nil {
log.WithFields(log.Fields{"error": err}).Error("Error with the container log scanner.")
}
}(reader)
// Returns an error, but ignoring it because it will always return an error when a streaming call is made.
client.Logs(logopts)
}