From a2a60aa99f4de8a6f9c505250c2d13d92e0418e0 Mon Sep 17 00:00:00 2001 From: Matthias Fulz Date: Tue, 18 Aug 2020 08:49:45 +0200 Subject: [PATCH] Added bufferlogger --- bufferlogger.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 bufferlogger.go diff --git a/bufferlogger.go b/bufferlogger.go new file mode 100644 index 0000000..3a2d33e --- /dev/null +++ b/bufferlogger.go @@ -0,0 +1,44 @@ +package slog + +import ( + "bufio" + "bytes" + "fmt" + "io" + "sync" +) + +type BufferLogger struct { + w io.Writer + m sync.Mutex + b bytes.Buffer + silent bool +} + +func (b *BufferLogger) Write(p []byte) (n int, err error) { + b.m.Lock() + defer b.m.Unlock() + + return b.w.Write(p) +} + +func (b *BufferLogger) FlushAll() { + b.m.Lock() + defer b.m.Unlock() + + w := b.w.(*bufio.Writer) + w.Flush() + if !b.silent { + fmt.Print(string(b.b.Bytes())) + } + b.b.Truncate(0) + b.w = bufio.NewWriter(&b.b) +} + +func NewBufferLogger(silent bool) io.Writer { + ret := &BufferLogger{} + ret.w = bufio.NewWriter(&ret.b) + ret.silent = silent + + return ret +}