From 2c46943f928529630d4c7c1ac5e2a0e2d56dec14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonne=20Ha=C3=9F?= Date: Wed, 28 Oct 2020 11:47:26 +0100 Subject: [PATCH] Support tailing stdin Prior to this, when doing mlogtail -f - tail, it gets stuck without making any useful progress. This implements reading from stdin in tail mode too, which combines nicely with for example journalctl -fau postfix | mlogtail -f - tail --- main.go | 50 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/main.go b/main.go index 93fd284..b49822c 100644 --- a/main.go +++ b/main.go @@ -293,23 +293,45 @@ func tailLog(cfg *Config) { go handleSIGINTKILL(ln, cfg) go PostfixCmgHandle(ln) - tailCfg := tail.Config{ - Location: &tail.SeekInfo{Offset: 0, Whence: 2}, - ReOpen: true, - Follow: true, - Logger: tail.DiscardingLogger, - } - t, err := tail.TailFile(cfg.maillog, tailCfg) - if err != nil { - fmt.Printf("Cannot tail mail log file: %v\n", err) + if cfg.maillog == "-" { + var err error + var line string + + PostfixParserInit(cfg) + buf := bufio.NewReaderSize(os.Stdin, 64*1024) + for { + line, err = buf.ReadString('\n') + if err != nil { + break + } else { + PostfixLineParse(line) + } + } closeListener(ln, cfg) - os.Exit(1) - } + if err != io.EOF { + fmt.Println(err) + os.Exit(1) + } + os.Exit(0) + } else { + tailCfg := tail.Config{ + Location: &tail.SeekInfo{Offset: 0, Whence: 2}, + ReOpen: true, + Follow: true, + Logger: tail.DiscardingLogger, + } + t, err := tail.TailFile(cfg.maillog, tailCfg) + if err != nil { + fmt.Printf("Cannot tail mail log file: %v\n", err) + closeListener(ln, cfg) + os.Exit(1) + } - PostfixParserInit(cfg) + PostfixParserInit(cfg) - for line := range t.Lines { - PostfixLineParse(line.Text) + for line := range t.Lines { + PostfixLineParse(line.Text) + } } }