mirror of
https://github.com/foomo/keel.git
synced 2025-10-16 12:35:34 +00:00
64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
package keeltemporal
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type logger struct {
|
|
l *zap.Logger
|
|
}
|
|
|
|
func NewLogger(l *zap.Logger) *logger {
|
|
return &logger{
|
|
l: l.WithOptions(zap.AddCallerSkip(3)),
|
|
}
|
|
}
|
|
|
|
func (t *logger) Debug(msg string, keyvals ...interface{}) {
|
|
t.l.Debug(msg, t.fields(keyvals...)...)
|
|
}
|
|
|
|
func (t *logger) Info(msg string, keyvals ...interface{}) {
|
|
// TODO check with temporal why errors are being logged as info!
|
|
for _, keyval := range keyvals {
|
|
if keyval == "Error" {
|
|
t.l.Error(msg, t.fields(keyvals...)...)
|
|
return
|
|
}
|
|
}
|
|
t.l.Info(msg, t.fields(keyvals...)...)
|
|
}
|
|
|
|
func (t *logger) Warn(msg string, keyvals ...interface{}) {
|
|
t.l.Warn(msg, t.fields(keyvals...)...)
|
|
}
|
|
|
|
func (t *logger) Error(msg string, keyvals ...interface{}) {
|
|
t.l.Error(msg, t.fields(keyvals...)...)
|
|
}
|
|
|
|
func (t *logger) With(keyvals ...interface{}) *logger {
|
|
return NewLogger(t.l.With(t.fields(keyvals...)...))
|
|
}
|
|
|
|
func (t *logger) fields(keyvals ...interface{}) []zap.Field {
|
|
var fields []zap.Field
|
|
for i := 0; i < len(keyvals); i++ {
|
|
if value, ok := keyvals[i].(zap.Field); ok {
|
|
fields = append(fields, value)
|
|
} else if value, ok := keyvals[i].(string); ok && len(keyvals) > i+2 {
|
|
fields = append(fields, zap.Any(strings.ToLower(value), keyvals[i+1]))
|
|
i++
|
|
} else if len(keyvals) > i+1 {
|
|
fields = append(fields, zap.Any(strings.ToLower(fmt.Sprintf("%v", keyvals[i])), keyvals[i+1]))
|
|
i++
|
|
} else {
|
|
fields = append(fields, zap.Any("undefined", keyvals[i]))
|
|
}
|
|
}
|
|
return fields
|
|
}
|