src/pkg/testing/iotest/logger.go - The Go Programming Language

Golang

Source file src/pkg/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.Print) each read to standard error,
    51	// printing the prefix and the hexadecimal data written.
    52	func NewReadLogger(prefix string, r io.Reader) io.Reader {
    53		return &readLogger{prefix, r}
    54	}