37 lines
560 B
Go
37 lines
560 B
Go
package log
|
|
|
|
import (
|
|
"io"
|
|
)
|
|
|
|
type unctrlwriter struct {
|
|
w io.Writer
|
|
}
|
|
|
|
func filteredwrite(w io.Writer, p []byte) (int, error) {
|
|
r := make([]byte, len(p))
|
|
for i, c := range p {
|
|
if c < 32 && i != len(p)-1 {
|
|
if c == '\t' || c == '\n' {
|
|
c = ' '
|
|
} else {
|
|
c = '.'
|
|
}
|
|
}
|
|
r[i] = c
|
|
}
|
|
return w.Write(r)
|
|
}
|
|
|
|
func (u unctrlwriter) Write(p []byte) (int, error) {
|
|
for i, c := range p {
|
|
if c < 32 && i != len(p)-1 {
|
|
return filteredwrite(u.w, p)
|
|
}
|
|
}
|
|
return u.w.Write(p)
|
|
}
|
|
|
|
func unctrl(w io.Writer) io.Writer {
|
|
return unctrlwriter{w: w}
|
|
}
|