logfrog-go/handlers/stream.go

57 lines
1.2 KiB
Go

package handlers
import (
"io"
"sync"
"codeark.it/Bithero-Agency-Go/logfrog-go"
)
type StreamHandler struct {
*logfrog.BaseLogHandler
mu sync.Mutex
writer io.Writer
closer io.Closer
}
func NewStreamHandlerFile(filepath string) (*StreamHandler, error) {
file, err := openOrCreateFile(filepath)
if err != nil {
return nil, err
}
b := logfrog.NewBaseLogHandler()
s := &StreamHandler{BaseLogHandler: b, writer: file, closer: file}
b.LogHandler = s
return s, nil
}
func NewStreamHandlerWithCloser(w io.Writer, c io.Closer) *StreamHandler {
b := logfrog.NewBaseLogHandler()
s := &StreamHandler{BaseLogHandler: b, writer: w, closer: c}
b.LogHandler = s
return s
}
func NewStreamHandler(w io.Writer) *StreamHandler {
b := logfrog.NewBaseLogHandler()
s := &StreamHandler{BaseLogHandler: b, writer: w, closer: nil}
b.LogHandler = s
return s
}
func (s *StreamHandler) OnClose() error {
if s.closer != nil {
return s.closer.Close()
}
return nil
}
func (s *StreamHandler) Write(value []byte) error {
s.mu.Lock()
defer s.mu.Unlock()
_, err := s.writer.Write(value)
return err
}