26 lines
604 B
Go
26 lines
604 B
Go
|
package log
|
||
|
|
||
|
import (
|
||
|
"io"
|
||
|
"sync"
|
||
|
)
|
||
|
|
||
|
// ConcurrentWriter is a concurrent safe wrapper around io.Writer
|
||
|
type ConcurrentWriter struct {
|
||
|
writer io.Writer
|
||
|
sync.Mutex
|
||
|
}
|
||
|
|
||
|
// NewConcurrentWriter crates a new concurrent writer wrapper around existing writer.
|
||
|
func NewConcurrentWriter(writer io.Writer) io.Writer {
|
||
|
return &ConcurrentWriter{writer: writer}
|
||
|
}
|
||
|
|
||
|
func (cw *ConcurrentWriter) Write(p []byte) (n int, err error) {
|
||
|
cw.Lock()
|
||
|
defer cw.Unlock()
|
||
|
// This is basically the same logic as in go's log.Output() which
|
||
|
// doesn't look at the returned number of bytes returned
|
||
|
return cw.writer.Write(p)
|
||
|
}
|