/
mtail.go
55 lines (48 loc) · 1.12 KB
/
mtail.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package main
import (
"fmt"
"github.com/ActiveState/tail"
"os"
"strconv"
)
func colourize(code, message string) string {
return "\033[" + code + "m" + message + "\033[0m"
}
func embolden(message string) string {
return "\033[1m" + message + "\033[0m"
}
func pad(message string, amount int) string {
messageCount := len(message)
if messageCount < amount {
newMessage := message
for i := 0; i < (amount - messageCount); i++ {
newMessage += " "
}
return newMessage
} else if messageCount == amount {
return message
} else {
return "..." + message[(messageCount-amount)+3:]
}
}
func main() {
output := make(chan string)
defer func() {
close(output)
tail.Cleanup()
}()
for i, arg := range os.Args {
go func(fileNumber int, filename string, outputChan chan string) {
t, _ := tail.TailFile(filename, tail.Config{
Follow: true, LimitRate: 15, MaxLineSize: 120,
})
for line := range t.Lines {
message := line.Text
output <- embolden(pad(filename, 15)+" => ") + colourize(strconv.Itoa(fileNumber+30), message)
}
}(i, arg, output)
}
for line := range output {
fmt.Println(line)
}
}