This commit is contained in:
Suyono 2023-09-04 15:58:41 +10:00
parent 5621312be1
commit 6eada2d348
3 changed files with 64 additions and 9 deletions

View File

@ -1,11 +1,10 @@
package log
import (
"os"
"gitea.suyono.dev/suyono/wingmate/daemon"
"github.com/rs/zerolog"
"io"
"os"
"sync"
)
type Level zerolog.Level
@ -15,12 +14,6 @@ type ProcessLogConfig interface {
FileName() string
}
type Writer struct {
writer io.Writer
mtx *sync.Mutex
wg *sync.WaitGroup
} //TODO: create a writer implementation using this struct, ensure sync and prevent abrupt truncation when stopping
const (
Trace Level = Level(zerolog.TraceLevel)
Debug Level = Level(zerolog.DebugLevel)

26
log/mapwriter.go Normal file
View File

@ -0,0 +1,26 @@
package log
import "sync"
type MapWriter struct {
writers map[string]*Writer
mtx *sync.Mutex
}
func (m *MapWriter) GetWriter(key string) *Writer {
m.mtx.Lock()
defer m.mtx.Unlock()
return m.writers[key]
}
func (m *MapWriter) Add(key string, w *Writer) {
if w == nil || len(key) == 0 {
return
}
m.mtx.Lock()
defer m.mtx.Unlock()
m.writers[key] = w
}

36
log/writer.go Normal file
View File

@ -0,0 +1,36 @@
package log
import (
"io"
"sync"
)
type Writer struct {
writer io.Writer
mtx *sync.Mutex
wg *sync.WaitGroup
} //TODO: create a writer implementation using this struct, ensure sync and prevent abrupt truncation when stopping
func NewWriter(w io.Writer) *Writer {
return &Writer{
writer: w,
mtx: &sync.Mutex{},
wg: &sync.WaitGroup{},
}
}
func (w *Writer) Write(b []byte) (int, error) {
defer w.wg.Done()
w.mtx.Lock()
defer w.mtx.Unlock()
return w.writer.Write(b)
}
func (w *Writer) Close() {
if wc, ok := w.writer.(io.WriteCloser); ok {
_ = wc.Close()
}
w.wg.Wait()
}