lemmy-reply-bot/logger.go

77 lines
1.2 KiB
Go

package main
import (
"fmt"
"os"
"go.elara.ws/logger"
"go.elara.ws/logger/log"
)
func init() {
l := logger.NewPretty(os.Stderr)
if os.Getenv("LEMMY_REPLY_BOT_DEBUG") == "1" {
l.Level = logger.LogLevelDebug
}
log.Logger = l
}
type retryableLogger struct{}
func (retryableLogger) Error(msg string, v ...any) {
msgs := splitMsgs(v)
evt := log.Error(msg)
sendEvt(evt, msgs)
}
func (retryableLogger) Info(msg string, v ...any) {
msgs := splitMsgs(v)
evt := log.Info(msg)
sendEvt(evt, msgs)
}
func (retryableLogger) Debug(msg string, v ...any) {
msgs := splitMsgs(v)
evt := log.Debug(msg)
sendEvt(evt, msgs)
}
func (retryableLogger) Warn(msg string, v ...any) {
msgs := splitMsgs(v)
evt := log.Warn(msg)
sendEvt(evt, msgs)
}
func splitMsgs(v []any) map[string]any {
out := map[string]any{}
for i, val := range v {
if (i+1)%2 == 0 {
continue
}
out[val.(string)] = v[i+1]
}
return out
}
func sendEvt(evt logger.LogBuilder, msgs map[string]any) {
for name, val := range msgs {
switch val := val.(type) {
case int:
evt = evt.Int(name, val)
case string:
evt = evt.Str(name, val)
case fmt.Stringer:
evt = evt.Stringer(name, val)
default:
evt = evt.Any(name, val)
}
}
evt.Send()
}