Source file src/testing/iotest/logger.go

     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  

View as plain text