summaryrefslogtreecommitdiff
path: root/vendor/codeberg.org/gruf/go-logger/writer.go
blob: 72321f5184ff01796461e4605a680baca6d7591b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package logger

import (
	"io"
	"io/ioutil"
	"sync"
)

// AddSafety wraps an io.Writer to provide mutex locking protection
func AddSafety(w io.Writer) io.Writer {
	if w == nil {
		w = ioutil.Discard
	} else if sw, ok := w.(*safeWriter); ok {
		return sw
	}
	return &safeWriter{wr: w}
}

// safeWriter wraps an io.Writer to provide mutex locking on write
type safeWriter struct {
	wr io.Writer
	mu sync.Mutex
}

func (w *safeWriter) Write(b []byte) (int, error) {
	w.mu.Lock()
	defer w.mu.Unlock()
	return w.wr.Write(b)
}