aboutsummaryrefslogtreecommitdiffstats
path: root/logging/writer.go
diff options
context:
space:
mode:
authorMarc Pervaz Boocha <mboocha@sudomsg.com>2026-02-28 00:16:22 +0530
committerMarc Pervaz Boocha <mboocha@sudomsg.com>2026-02-28 00:16:22 +0530
commit1c75db8c1d1dc6a0a9097016dbdbbb4348f5c835 (patch)
treee3aa95caea8ea13b2e50b69babad2ab9eebfa0f2 /logging/writer.go
parentAdd Syslog and refactored the Sink api (diff)
downloadkit-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.go45
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
+}