func()

in systemtest/apmservertest/server.go [463:510]


func (s *Server) consumeStderr(procStderr io.Reader, out *io.PipeWriter) {
	type logEntry struct {
		Timestamp logpTimestamp `json:"@timestamp"`
		Message   string        `json:"message"`
		Level     zapcore.Level `json:"log.level"`
		Logger    string        `json:"log.logger"`
		Origin    struct {
			File string `json:"file.name"`
			Line int    `json:"file.line"`
		} `json:"log.origin"`
	}

	decoder := json.NewDecoder(procStderr)
	for {
		var raw json.RawMessage
		if err := decoder.Decode(&raw); err != nil {
			break
		}
		var entry logEntry
		if err := json.Unmarshal(raw, &entry); err != nil {
			break
		}
		var fields map[string]interface{}
		if err := json.Unmarshal(raw, &fields); err != nil {
			break
		}
		delete(fields, "@timestamp")
		delete(fields, "log.level")
		delete(fields, "log.logger")
		delete(fields, "log.origin")
		delete(fields, "message")
		s.Logs.add(LogEntry{
			Timestamp: time.Time(entry.Timestamp),
			Logger:    entry.Logger,
			Level:     entry.Level,
			File:      entry.Origin.File,
			Line:      entry.Origin.Line,
			Message:   entry.Message,
			Fields:    fields,
		})
	}
	s.Logs.close()

	// Send the remaining stderr to s.Stderr.
	procStderr = io.MultiReader(decoder.Buffered(), procStderr)
	_, err := io.Copy(out, procStderr)
	out.CloseWithError(err)
}