// Tail begins tailing the files for this instance. func (instance *Instance) Tail(tracker storage.Tracker) { log.Infof("Tailing %v logs for %v -- %+v", instance.Type, instance.Identifier(), instance) stopCh := make(chan bool) instance.pubch = pubchannel.New("event.timeline", stopCh) logfiles := instance.getLogFiles() log.Infof("Determined log files: %+v", logfiles) shortDockerId := instance.getShortDockerId() tracker.RegisterInstance(shortDockerId) for name, filename := range logfiles { // call tailStream for standard docker logs and tailFile for user custom logs if instance.DockerStreams && (name == STDOUT || name == STDERR) { go instance.tailStream(name, filename, stopCh, tracker) } else { go instance.tailFile(name, filename, stopCh, tracker) } } go func() { docker.DockerListener.BlockUntilContainerStops(instance.DockerId) log.Infof("Container for %v exited", instance.Identifier()) close(stopCh) tracker.Remove(shortDockerId) }() }