log/envelope.go

52 lines
814 B
Go
Raw Normal View History

2024-01-09 12:54:30 +01:00
package log
import (
"fmt"
"time"
)
type envelope struct {
log logger
lvl level
// err is an error attached to the envelope
err error
args map[string]string
}
func (e *envelope) Msg(f string, args ...any) {
if e.log.Level() < e.lvl {
return // No logging
}
// formatter and output things here
E := &envelopeData{*e, time.Now()}
msg := fmt.Sprintf(f, args...)
loggers[e.log].format.Output(msg, E)
e.lvl.Hook(msg)
}
func (e *envelope) Arg(name string, value any) *envelope {
e.args[name] = fmt.Sprintf("%v", value)
return e
}
func (e *envelope) Err(err error) *envelope {
e.err = err
return e
}
func (e *envelope) To(l logger) *envelope {
e.log = l
return e
}
type Fn func(fmt string, args ...any)
func (e *envelope) If(msg func(Fn)) {
if e.log.Level() >= e.lvl {
msg(e.Msg)
}
}