in logger.go [148:187]
func (l *daisyLog) WriteSerialPortLogsToCloudLogging(w *Workflow, instance string) {
if l.cloudLogger == nil {
return
}
if _, hasBuffer := l.serialLogs[instance]; !hasBuffer {
return
}
logs := l.serialLogs[instance].Bytes()
writeLog := func(data []byte) {
entry := &LogEntry{
LocalTimestamp: time.Now(),
WorkflowName: getAbsoluteName(w),
Message: fmt.Sprintf("Serial port output for instance %q", instance),
SerialPort1: string(data),
Type: "Daisy",
}
l.cloudLogger.Log(logging.Entry{Timestamp: entry.LocalTimestamp, Payload: entry})
}
// Write the output to cloud logging only after instance has stopped.
// Type assertion check is needed for tests not to panic.
// Split if output is too long for log entry (100K max, we leave a 2K buffer).
if len(logs) <= 98*1024 {
writeLog(logs)
return
}
bs := bytes.SplitAfter(logs, []byte("\n"))
var data []byte
for _, b := range bs {
if len(data)+len(b) > 98*1024 {
writeLog(data)
data = b
} else {
data = append(data, b...)
}
}
writeLog(data)
}