64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
package tea
|
|
|
|
import (
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
"go.uber.org/zap/zapcore"
|
|
)
|
|
|
|
type Core struct {
|
|
zapcore.LevelEnabler
|
|
enc zapcore.Encoder
|
|
prog *tea.Program
|
|
}
|
|
|
|
type LogMsg string
|
|
|
|
func NewLogger(prog *tea.Program, encoder zapcore.Encoder, enabler zapcore.LevelEnabler) zapcore.Core {
|
|
core := Core{}
|
|
core.LevelEnabler = enabler
|
|
core.enc = encoder
|
|
core.prog = prog
|
|
return &core
|
|
}
|
|
|
|
func (c *Core) With(fields []zapcore.Field) zapcore.Core {
|
|
clone := c.clone()
|
|
addFields(clone.enc, fields)
|
|
return clone
|
|
}
|
|
|
|
func (c *Core) Check(entry zapcore.Entry, checked *zapcore.CheckedEntry) *zapcore.CheckedEntry {
|
|
if c.Enabled(entry.Level) {
|
|
return checked.AddCore(entry, c)
|
|
}
|
|
return checked
|
|
}
|
|
|
|
func (c *Core) Write(ent zapcore.Entry, fields []zapcore.Field) error {
|
|
|
|
buf, err := c.enc.EncodeEntry(ent, fields)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = c.prog.Send(LogMsg(buf.Bytes()))
|
|
defer buf.Free()
|
|
return err
|
|
}
|
|
|
|
func (c *Core) Sync() error {
|
|
return nil
|
|
}
|
|
|
|
func (c *Core) clone() *Core {
|
|
return &Core{
|
|
LevelEnabler: c.LevelEnabler,
|
|
enc: c.enc.Clone(),
|
|
prog: c.prog,
|
|
}
|
|
}
|
|
|
|
func addFields(enc zapcore.ObjectEncoder, fields []zapcore.Field) {
|
|
for i := range fields {
|
|
fields[i].AddTo(enc)
|
|
}
|
|
}
|