wip: log
This commit is contained in:
parent
5621312be1
commit
6eada2d348
11
log/log.go
11
log/log.go
@ -1,11 +1,10 @@
|
|||||||
package log
|
package log
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
"gitea.suyono.dev/suyono/wingmate/daemon"
|
"gitea.suyono.dev/suyono/wingmate/daemon"
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
"io"
|
|
||||||
"os"
|
|
||||||
"sync"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Level zerolog.Level
|
type Level zerolog.Level
|
||||||
@ -15,12 +14,6 @@ type ProcessLogConfig interface {
|
|||||||
FileName() string
|
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 (
|
const (
|
||||||
Trace Level = Level(zerolog.TraceLevel)
|
Trace Level = Level(zerolog.TraceLevel)
|
||||||
Debug Level = Level(zerolog.DebugLevel)
|
Debug Level = Level(zerolog.DebugLevel)
|
||||||
|
|||||||
26
log/mapwriter.go
Normal file
26
log/mapwriter.go
Normal 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
36
log/writer.go
Normal 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()
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user