| 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) |
| } |