treerack/trace.go

75 lines
1.3 KiB
Go
Raw Normal View History

2017-07-15 21:49:08 +02:00
package treerack
2017-06-25 17:51:08 +02:00
import (
"fmt"
"os"
)
type Trace interface {
2017-06-26 00:20:54 +02:00
OutN(int, ...interface{})
2017-06-25 17:51:08 +02:00
Out(...interface{})
Out1(...interface{})
Out2(...interface{})
Out3(...interface{})
Extend(string) Trace
}
type DefaultTrace struct {
level int
path string
}
type NopTrace struct{}
func NewTrace(level int) *DefaultTrace {
return &DefaultTrace{
level: level,
path: "/",
}
}
2017-06-26 00:20:54 +02:00
func (t *DefaultTrace) OutN(level int, a ...interface{}) {
if level > t.level {
2017-06-25 17:51:08 +02:00
return
}
fmt.Fprintln(os.Stderr, append([]interface{}{t.path}, a...)...)
}
func (t *DefaultTrace) Out(a ...interface{}) {
2017-06-26 00:20:54 +02:00
t.OutN(0, a...)
2017-06-25 17:51:08 +02:00
}
func (t *DefaultTrace) Out1(a ...interface{}) {
2017-06-26 00:20:54 +02:00
t.OutN(1, a...)
2017-06-25 17:51:08 +02:00
}
func (t *DefaultTrace) Out2(a ...interface{}) {
2017-06-26 00:20:54 +02:00
t.OutN(2, a...)
2017-06-25 17:51:08 +02:00
}
func (t *DefaultTrace) Out3(a ...interface{}) {
2017-06-26 00:20:54 +02:00
t.OutN(3, a...)
2017-06-25 17:51:08 +02:00
}
func (t *DefaultTrace) Extend(name string) Trace {
var p string
if t.path == "/" {
p = t.path + name
} else {
p = t.path + "/" + name
}
return &DefaultTrace{
level: t.level,
path: p,
}
}
2017-06-26 00:20:54 +02:00
func (NopTrace) OutN(int, ...interface{}) {}
func (NopTrace) Out(...interface{}) {}
func (NopTrace) Out1(...interface{}) {}
func (NopTrace) Out2(...interface{}) {}
func (NopTrace) Out3(...interface{}) {}
func (t NopTrace) Extend(string) Trace { return t }