in logger/buffered_logger.go [213:236]
func (bl *bufferedLogger) sendLogMessagesToDestination(cleanupTime *time.Duration) error {
// Keep sending log message to destination defined by the underlying log driver until
// the ring buffer is closed.
for !bl.buffer.isClosed {
if err := bl.sendLogMessageToDestination(); err != nil {
debug.SendEventsToLog(DaemonName, err.Error(), debug.ERROR, 1)
return err
}
}
// If both container pipes are closed, flush messages left in ring buffer.
debug.SendEventsToLog(DaemonName, "All pipes are closed, flushing buffer.", debug.INFO, 0)
if err := bl.flushMessages(); err != nil {
debug.SendEventsToLog(DaemonName, err.Error(), debug.ERROR, 1)
return err
}
// Sleep sometime to let shim logger clean up, for example, to allow enough time for the last
// few log messages be flushed to destination like CloudWatch.
debug.SendEventsToLog(DaemonName,
fmt.Sprintf("Sleeping %s for cleanning up.", cleanupTime.String()),
debug.INFO, 0)
time.Sleep(*cleanupTime)
return nil
}