-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathlogger.go
48 lines (42 loc) · 841 Bytes
/
logger.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
package hego
import (
"bytes"
"fmt"
"text/tabwriter"
)
func tabbedJoin(s []string) (res string) {
for _, val := range s {
res += val + "\t"
}
return
}
type logger struct {
name string
verbose int
maxIter int
writer *tabwriter.Writer
buf bytes.Buffer
}
func newLogger(name string, cols []string, verbose, maxIter int) *logger {
l := logger{}
l.name = name
l.writer = tabwriter.NewWriter(&l.buf, 0, 0, 3, []byte(" ")[0], tabwriter.AlignRight)
l.verbose = verbose
l.maxIter = maxIter
fmt.Fprintln(l.writer, tabbedJoin(cols))
return &l
}
func (l *logger) AddLine(i int, cols []string) {
if l.verbose == 0 {
return
}
if i%l.verbose == 0 || i+1 == l.maxIter {
fmt.Fprintln(l.writer, tabbedJoin(cols))
}
}
func (l *logger) Flush() {
l.writer.Flush()
if l.verbose > 0 {
fmt.Println(l.buf.String())
}
}