diff options
| author | Marc Pervaz Boocha <mboocha@sudomsg.com> | 2026-02-28 00:16:22 +0530 |
|---|---|---|
| committer | Marc Pervaz Boocha <mboocha@sudomsg.com> | 2026-02-28 00:16:22 +0530 |
| commit | 1c75db8c1d1dc6a0a9097016dbdbbb4348f5c835 (patch) | |
| tree | e3aa95caea8ea13b2e50b69babad2ab9eebfa0f2 /logging/writer.go | |
| parent | Add Syslog and refactored the Sink api (diff) | |
| download | kit-main.tar kit-main.tar.gz kit-main.tar.bz2 kit-main.tar.lz kit-main.tar.xz kit-main.tar.zst kit-main.zip | |
Add Host Loggermain
Diffstat (limited to 'logging/writer.go')
| -rw-r--r-- | logging/writer.go | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/logging/writer.go b/logging/writer.go new file mode 100644 index 0000000..6f1ee34 --- /dev/null +++ b/logging/writer.go @@ -0,0 +1,45 @@ +package logging + +import ( + "fmt" + "io" + "log/slog" + "sync" +) + +type WriterSink struct { + Writer io.Writer + mu sync.Mutex + Encoder Encoder + Level slog.Level + ReplaceAttr func(groups []string, a slog.Attr) slog.Attr +} + +var _ Sink = &WriterSink{} + +func NewWriterSink(w io.Writer, encoder Encoder, level slog.Leveler, replaceAttr func(groups []string, a slog.Attr) slog.Attr) *WriterSink { + return &WriterSink{ + Writer: w, + Encoder: encoder, + Level: level.Level(), + ReplaceAttr: replaceAttr, + } +} + +func (s *WriterSink) Enabled(level slog.Level) bool { + return s.Level <= level +} + +func (s *WriterSink) Append(r slog.Record) error { + it := RecordAll(r, s.ReplaceAttr) + out, err := s.Encoder(it) + if err != nil { + return fmt.Errorf("failed to encode: %w", err) + } + + s.mu.Lock() + defer s.mu.Unlock() + + _, err = fmt.Fprintln(s.Writer, out) + return err +} |
