diff options
Diffstat (limited to 'libpod/logs/log.go')
-rw-r--r-- | libpod/logs/log.go | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/libpod/logs/log.go b/libpod/logs/log.go index a9554088b..2637c8524 100644 --- a/libpod/logs/log.go +++ b/libpod/logs/log.go @@ -73,7 +73,7 @@ func GetLogFile(path string, options *LogOptions) (*tail.Tail, []*LogLine, error Whence: whence, } - t, err := tail.TailFile(path, tail.Config{MustExist: true, Poll: true, Follow: options.Follow, Location: &seek, Logger: tail.DiscardingLogger}) + t, err := tail.TailFile(path, tail.Config{MustExist: true, Poll: true, Follow: options.Follow, Location: &seek, Logger: tail.DiscardingLogger, ReOpen: options.Follow}) return t, logTail, err } @@ -137,7 +137,7 @@ func getTailLog(path string, tail int) ([]*LogLine, error) { nllCounter++ } } - // if we have enough loglines, we can hangup + // if we have enough log lines, we can hangup if nllCounter >= tail { break } @@ -161,7 +161,7 @@ func getTailLog(path string, tail int) ([]*LogLine, error) { return tailLog, nil } -// String converts a logline to a string for output given whether a detail +// String converts a log line to a string for output given whether a detail // bool is specified. func (l *LogLine) String(options *LogOptions) string { var out string @@ -210,3 +210,19 @@ func NewLogLine(line string) (*LogLine, error) { func (l *LogLine) Partial() bool { return l.ParseLogType == PartialLogType } + +func (l *LogLine) Write(stdout io.Writer, stderr io.Writer, logOpts *LogOptions) { + switch l.Device { + case "stdout": + if stdout != nil { + fmt.Fprintln(stdout, l.String(logOpts)) + } + case "stderr": + if stderr != nil { + fmt.Fprintln(stderr, l.String(logOpts)) + } + default: + // Warn the user if the device type does not match. Most likely the file is corrupted. + logrus.Warnf("unknown Device type '%s' in log file from Container %s", l.Device, l.CID) + } +} |