-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathlogger.go
48 lines (41 loc) · 925 Bytes
/
logger.go
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package xco
import (
"io"
"log"
)
type writeLogger struct {
log *log.Logger
w io.Writer
}
func (l *writeLogger) Write(p []byte) (n int, err error) {
n, err = l.w.Write(p)
if err == nil {
l.log.Printf("|> %s", p[0:n])
} else {
l.log.Printf("|> %s: %v", p[0:n], err)
}
return
}
// newWriteLogger returns a writer that behaves like w except that it
// logs the string written.
func newWriteLogger(log *log.Logger, w io.Writer) io.Writer {
return &writeLogger{log, w}
}
type readLogger struct {
log *log.Logger
r io.Reader
}
func (l *readLogger) Read(p []byte) (n int, err error) {
n, err = l.r.Read(p)
if err == nil {
l.log.Printf("<| %s", p[0:n])
} else {
l.log.Printf("<| %s: %v", p[0:n], err)
}
return
}
// newReadLogger returns a reader that behaves like r except that it
// logs the string read.
func newReadLogger(log *log.Logger, r io.Reader) io.Reader {
return &readLogger{log, r}
}