// drainChannel reads non-empty log lines from a channel (until it is closed), // extracts logging metadata from them (severity, timestamp, etc) via given // parser and pushes log entries to the push buffer. Doesn't return errors: use // buf.Stop() to check for any errors during sending. func drainChannel(src chan string, parser LogParser, buf PushBuffer, logger logging.Logger) { for line := range src { line = strings.TrimSpace(line) if line == "" { continue } entry := parser.ParseLogLine(line) if entry == nil { if logger != nil { logger.Errorf("skipping line, unrecognized format: %s", line) } continue } if entry.InsertID == "" { insertID, err := computeInsertID(entry) if err != nil { if logger != nil { logger.Errorf("skipping line, can't compute insertId: %s", err) } continue } entry.InsertID = insertID } buf.Add(*entry) } }