go-kit/log/testlogger.go

98 lines
1.6 KiB
Go

package log
type TestLine struct {
Level LogLevel
Message string
Fields Fields
}
type TestOut struct {
Lines []TestLine
}
func NewTestOut() *TestOut {
return &TestOut{
Lines: make([]TestLine, 0),
}
}
func (to *TestOut) Append(tl TestLine) {
to.Lines = append(to.Lines, tl)
}
func (to *TestOut) Flush() {
to.Lines = make([]TestLine, 0)
}
type TestLogger struct {
fields Fields
level LogLevel
out *TestOut
}
func NewTestLogger(out *TestOut) Logger {
return &TestLogger{
fields: make(Fields),
level: LevelDebug,
out: out,
}
}
func (tl *TestLogger) SetLogLevel(level LogLevel) {
tl.level = level
}
func (tl *TestLogger) WithField(key string, value interface{}) Logger {
return tl.With(Fields{key: value})
}
func (tl *TestLogger) WithErr(err error) Logger {
return tl.With(Fields{"error": err})
}
func (tl *TestLogger) With(fields Fields) Logger {
newFields := make(Fields)
for k, v := range tl.fields {
newFields[k] = v
}
for k, v := range fields {
newFields[k] = v
}
return &TestLogger{
fields: newFields,
level: tl.level,
out: tl.out,
}
}
func (tl *TestLogger) Debug(message string) {
tl.out.Append(TestLine{
Level: LevelDebug,
Message: message,
Fields: tl.fields,
})
tl.fields = make(Fields)
}
func (tl *TestLogger) Info(message string) {
tl.out.Append(TestLine{
Level: LevelInfo,
Message: message,
Fields: tl.fields,
})
tl.fields = make(Fields)
}
func (tl *TestLogger) Error(message string) {
tl.out.Append(TestLine{
Level: LevelError,
Message: message,
Fields: tl.fields,
})
tl.fields = make(Fields)
}