Codebase list golang-github-go-kit-kit / 95a7937 log / prefix_logger.go
95a7937

Tree @95a7937 (Download .tar.gz)

prefix_logger.go @95a7937raw · history · blame

package log

import (
	"bytes"
	"fmt"
	"io"
)

type prefixLogger struct {
	io.Writer
}

// NewPrefixLogger returns a basic logger that encodes keyvals as simple "k=v"
// pairs to the Writer.
func NewPrefixLogger(w io.Writer) Logger {
	return &prefixLogger{w}
}

func (l prefixLogger) Log(keyvals ...interface{}) error {
	if len(keyvals)%2 == 1 {
		panic("odd number of keyvals")
	}
	buf := &bytes.Buffer{}
	for i := 0; i < len(keyvals); i += 2 {
		if i != 0 {
			if _, err := fmt.Fprint(buf, " "); err != nil {
				return err
			}
		}
		if _, err := fmt.Fprintf(buf, "%s=%v", keyvals[i], keyvals[i+1]); err != nil {
			return err
		}
	}
	if _, err := fmt.Fprintln(l.Writer, buf.String()); err != nil {
		return err
	}
	return nil
}