1
0
Fork 0
logger/rotater/wrapped.go

39 lines
844 B
Go
Raw Normal View History

2017-11-06 22:24:08 +09:00
package rotater
import (
"sync"
)
type LockedWriteSyncer struct {
sync.Mutex
ws WriteSyncer
}
// Lock wraps a WriteSyncer in a mutex to make it safe for concurrent use. In
// particular, *os.Files must be locked before use.
func newLocked(ws WriteSyncer) RotateSyncer {
if lws, ok := ws.(*LockedWriteSyncer); ok {
// no need to layer on another lock
return lws
}
return &LockedWriteSyncer{ws: ws}
}
func (s *LockedWriteSyncer) Write(bs []byte) (int, error) {
s.Lock()
n, err := s.ws.Write(bs)
s.Unlock()
return n, err
}
func (s *LockedWriteSyncer) Sync() error {
s.Lock()
err := s.ws.Sync()
s.Unlock()
return err
}
func (r *LockedWriteSyncer) SetOnClose(closeFunc CloseFunc) {}
func (r *LockedWriteSyncer) Rotate() (err error) { return }
func (r *LockedWriteSyncer) Close() (err error) { return }