formatter.go 718 Bytes
Newer Older
package log

import (
	"fmt"
	"strings"
	"time"
)

// A Formatter formats an entry.
type Formatter interface {
	Format(*Entry) ([]byte, error)
}

// A FormatterFunc implements Formatter using a single function.
type FormatterFunc func(*Entry) ([]byte, error)

// Format implements Formatter.
func (f FormatterFunc) Format(entry *Entry) ([]byte, error) { return f(entry) }

// TextFormatter formats an entry as one-line text.
var TextFormatter = FormatterFunc(func(entry *Entry) ([]byte, error) {
	return []byte(strings.TrimSpace(fmt.Sprintf(
		"%s %s[%d] [%s]: %s {%s}",
		entry.Time.Format(time.RFC3339),
		entry.Category,
		entry.PID,
		entry.Level.String()[:4],
		entry.Message,
		entry.Fields,
	)) + "\n"), nil