1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package iotest 6 7 import ( 8 "io" 9 "log" 10 ) 11 12 type writeLogger struct { 13 prefix string 14 w io.Writer 15 } 16 17 func (l *writeLogger) Write(p []byte) (n int, err error) { 18 n, err = l.w.Write(p) 19 if err != nil { 20 log.Printf("%s %x: %v", l.prefix, p[0:n], err) 21 } else { 22 log.Printf("%s %x", l.prefix, p[0:n]) 23 } 24 return 25 } 26 27 // NewWriteLogger returns a writer that behaves like w except 28 // that it logs (using log.Printf) each write to standard error, 29 // printing the prefix and the hexadecimal data written. 30 func NewWriteLogger(prefix string, w io.Writer) io.Writer { 31 return &writeLogger{prefix, w} 32 } 33 34 type readLogger struct { 35 prefix string 36 r io.Reader 37 } 38 39 func (l *readLogger) Read(p []byte) (n int, err error) { 40 n, err = l.r.Read(p) 41 if err != nil { 42 log.Printf("%s %x: %v", l.prefix, p[0:n], err) 43 } else { 44 log.Printf("%s %x", l.prefix, p[0:n]) 45 } 46 return 47 } 48 49 // NewReadLogger returns a reader that behaves like r except 50 // that it logs (using log.Printf) each read to standard error, 51 // printing the prefix and the hexadecimal data read. 52 func NewReadLogger(prefix string, r io.Reader) io.Reader { 53 return &readLogger{prefix, r} 54 } 55