log

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 17, 2017 License: MIT Imports: 9 Imported by: 0

README

log

Package log implements a simple structured logging API inspired by Logrus, designed with centralization in mind. Read more on Medium.

Badges

Build Status GoDoc


tjholowaychuk.com  ·  GitHub @tj  ·  Twitter @tjholowaychuk

Documentation

Overview

Package log implements a simple structured logging API designed with few assumptions. Designed for centralized logging solutions such as Kinesis which require encoding and decoding before fanning-out to handlers.

You may use this package with inline handlers, much like Logrus, however a centralized solution is recommended so that apps do not need to be re-deployed to add or remove logging service providers.

Package text implements a development-friendly textual handler.

Example (Errors)

Errors are passed to WithError(), populating the "error" field.

err := errors.New("boom")
log.WithError(err).Error("upload failed")
Output:

Example (MultipleFields)

Multiple fields can be set, via chaining, or WithFields().

log.WithFields(log.Fields{
	"user": "Tobi",
	"file": "sloth.png",
	"type": "image/png",
}).Info("upload")
Output:

Example (Structured)

Structured logging is supported with fields, and is recommended over the formatted message variants.

log.WithField("user", "Tobo").Info("logged in")
Output:

Example (Trace)

Trace can be used to simplify logging of start and completion events, for example an upload which may fail.

defer log.Trace("upload").Stop(&err)
return nil
Output:

Example (Unstructured)

Unstructured logging is supported, but not recommended since it is hard to query.

log.Infof("%s logged in", "Tobi")
Output:

Index

Examples

Constants

This section is empty.

Variables

View Source
var Strings = [...]string{
	DebugLevel: "DEBUG",
	InfoLevel:  "INFO",
	WarnLevel:  "WARN",
	ErrorLevel: "ERROR",
	FatalLevel: "FATAL",
}

Strings mapping.

Functions

func Debug

func Debug(v ...interface{})

Debug level message.

func Debugf

func Debugf(msg string, v ...interface{})

Debugf level formatted message.

func Error

func Error(v ...interface{})

Error level message.

func Errorf

func Errorf(msg string, v ...interface{})

Errorf level formatted message.

func Fatal

func Fatal(v ...interface{})

Fatal level message, followed by an exit.

func Fatalf

func Fatalf(msg string, v ...interface{})

Fatalf level formatted message, followed by an exit.

func Info

func Info(v ...interface{})

Info level message.

func Infof

func Infof(msg string, v ...interface{})

Infof level formatted message.

func Printf

func Printf(msg string, v ...interface{})

Printf wraps Infof

func Println

func Println(v ...interface{})

Println wraps Info

func SetHandler

func SetHandler(h Handler)

SetHandler sets the handler. This is not thread-safe.

func SetLevel

func SetLevel(l Level)

SetLevel sets the log level. This is not thread-safe.

func Warn

func Warn(v ...interface{})

Warn level message.

func Warnf

func Warnf(msg string, v ...interface{})

Warnf level formatted message.

Types

type Entry

type Entry struct {
	Logger    *Logger   `json:"-"`
	Fields    Fields    `json:"fields"`
	Level     Level     `json:"level"`
	Timestamp time.Time `json:"timestamp"`
	Message   string    `json:"message"`
	// contains filtered or unexported fields
}

Entry represents a single log entry.

func NewEntry

func NewEntry(log *Logger) *Entry

NewEntry returns a new entry for `log`.

func Trace

func Trace(msg string) *Entry

Trace returns a new entry with a Stop method to fire off a corresponding completion log, useful with defer.

func WithError

func WithError(err error) *Entry

WithError returns a new entry with the "error" set to `err`.

func WithField

func WithField(key string, value interface{}) *Entry

WithField returns a new entry with the `key` and `value` set.

func WithFields

func WithFields(fields Fielder) *Entry

WithFields returns a new entry with `fields` set.

func WithMemStats

func WithMemStats() *Entry

WithError returns a new entry with the "error" set to `err`.

func (*Entry) Debug

func (e *Entry) Debug(v ...interface{})

Debug level message.

func (*Entry) Debugf

func (e *Entry) Debugf(msg string, v ...interface{})

Debugf level formatted message.

func (*Entry) Error

func (e *Entry) Error(v ...interface{})

Error level message.

func (*Entry) Errorf

func (e *Entry) Errorf(msg string, v ...interface{})

Errorf level formatted message.

func (*Entry) Fatal

func (e *Entry) Fatal(v ...interface{})

Fatal level message, followed by an exit.

func (*Entry) Fatalf

func (e *Entry) Fatalf(msg string, v ...interface{})

Fatalf level formatted message, followed by an exit.

func (*Entry) Info

func (e *Entry) Info(v ...interface{})

Info level message.

func (*Entry) Infof

func (e *Entry) Infof(msg string, v ...interface{})

Infof level formatted message.

func (*Entry) Printf

func (e *Entry) Printf(msg string, v ...interface{})

Printf wraps Infof

func (*Entry) Println

func (e *Entry) Println(v ...interface{})

Println wraps Info

func (*Entry) Stop

func (e *Entry) Stop(err *error)

Stop should be used with Trace, to fire off the completion message. When an `err` is passed the "error" field is set, and the log level is error.

func (*Entry) Trace

func (e *Entry) Trace(msg string) *Entry

Trace returns a new entry with a Stop method to fire off a corresponding completion log, useful with defer.

func (*Entry) Warn

func (e *Entry) Warn(v ...interface{})

Warn level message.

func (*Entry) Warnf

func (e *Entry) Warnf(msg string, v ...interface{})

Warnf level formatted message.

func (*Entry) WithError

func (e *Entry) WithError(err error) *Entry

WithError returns a new entry with the "error" set to `err`.

func (*Entry) WithField

func (e *Entry) WithField(key string, value interface{}) *Entry

WithField returns a new entry with the `key` and `value` set.

func (*Entry) WithFields

func (e *Entry) WithFields(fields Fielder) *Entry

WithFields returns a new entry with `fields` set.

func (*Entry) WithMemStats

func (e *Entry) WithMemStats() *Entry

type Fielder

type Fielder interface {
	Fields() Fields
}

Fielder is an interface for providing fields to custom types.

type Fields

type Fields map[string]interface{}

Fields represents a map of entry level data used for structured logging.

func (Fields) Fields

func (f Fields) Fields() Fields

Fields implements Fielder.

type Fn

type Fn func() interface{}

Any values that are dynamically determined at log time using a function call should be cast to this type.

type Handler

type Handler interface {
	HandleLog(*Entry) error
}

Handler is used to handle log events, outputting them to stdio or sending them to remote services. See the "handlers" directory for implementations.

It is left up to Handlers to implement thread-safety.

func NewSimple

func NewSimple(w io.Writer) Handler

New handler.

type HandlerFunc

type HandlerFunc func(*Entry) error

The HandlerFunc type is an adapter to allow the use of ordinary functions as log handlers. If f is a function with the appropriate signature, HandlerFunc(f) is a Handler object that calls f.

func (HandlerFunc) HandleLog

func (f HandlerFunc) HandleLog(e *Entry) error

HandleLog calls f(e).

type Interface

type Interface interface {
	WithFields(fields Fielder) *Entry
	WithField(key string, value interface{}) *Entry
	WithError(err error) *Entry
	WithMemStats() *Entry
	Debug(v ...interface{})
	Info(v ...interface{})
	Warn(v ...interface{})
	Error(v ...interface{})
	Fatal(v ...interface{})
	Println(v ...interface{})
	Debugf(msg string, v ...interface{})
	Infof(msg string, v ...interface{})
	Warnf(msg string, v ...interface{})
	Errorf(msg string, v ...interface{})
	Fatalf(msg string, v ...interface{})
	Printf(msg string, v ...interface{})
	Trace(msg string) *Entry
}

Interface represents the API of both Logger and Entry.

var Log Interface = &Logger{
	Handler: NewSimple(os.Stderr),
	Level:   InfoLevel,
}

singletons ftw?

type Level

type Level int

Level of severity.

const (
	DebugLevel Level = iota
	InfoLevel
	WarnLevel
	ErrorLevel
	FatalLevel
)

Log levels.

func ParseLevel

func ParseLevel(s string) (Level, error)

ParseLevel parses level string.

func (Level) MarshalJSON

func (l Level) MarshalJSON() ([]byte, error)

MarshalJSON returns the level string.

func (Level) String

func (l Level) String() string

String implements io.Stringer.

type Logger

type Logger struct {
	Handler Handler
	Level   Level
}

Logger represents a logger with configurable Level and Handler.

func (*Logger) Debug

func (l *Logger) Debug(v ...interface{})

Debug level message.

func (*Logger) Debugf

func (l *Logger) Debugf(msg string, v ...interface{})

Debugf level formatted message.

func (*Logger) Error

func (l *Logger) Error(v ...interface{})

Error level message.

func (*Logger) Errorf

func (l *Logger) Errorf(msg string, v ...interface{})

Errorf level formatted message.

func (*Logger) Fatal

func (l *Logger) Fatal(v ...interface{})

Fatal level message, followed by an exit.

func (*Logger) Fatalf

func (l *Logger) Fatalf(msg string, v ...interface{})

Fatalf level formatted message, followed by an exit.

func (*Logger) Info

func (l *Logger) Info(v ...interface{})

Info level message.

func (*Logger) Infof

func (l *Logger) Infof(msg string, v ...interface{})

Infof level formatted message.

func (*Logger) Printf

func (l *Logger) Printf(msg string, v ...interface{})

Printf wraps Infof

func (*Logger) Println

func (l *Logger) Println(v ...interface{})

Println wraps Info

func (*Logger) Trace

func (l *Logger) Trace(msg string) *Entry

Trace returns a new entry with a Stop method to fire off a corresponding completion log, useful with defer.

func (*Logger) Warn

func (l *Logger) Warn(v ...interface{})

Warn level message.

func (*Logger) Warnf

func (l *Logger) Warnf(msg string, v ...interface{})

Warnf level formatted message.

func (*Logger) WithError

func (l *Logger) WithError(err error) *Entry

WithError returns a new entry with the "error" set to `err`.

func (*Logger) WithField

func (l *Logger) WithField(key string, value interface{}) *Entry

WithField returns a new entry with the `key` and `value` set.

func (*Logger) WithFields

func (l *Logger) WithFields(fields Fielder) *Entry

WithFields returns a new entry with `fields` set.

func (*Logger) WithMemStats

func (l *Logger) WithMemStats() *Entry

type SimpleHandler

type SimpleHandler struct {
	Writer io.Writer
	// contains filtered or unexported fields
}

Handler implementation.

func (*SimpleHandler) HandleLog

func (h *SimpleHandler) HandleLog(e *Entry) error

HandleLog implements log.Handler.

Directories

Path Synopsis
_examples
cli
es
handlers
cli
Package cli implements a colored text handler suitable for command-line interfaces.
Package cli implements a colored text handler suitable for command-line interfaces.
cli2
Package cli2 implements a colored text handler suitable for command-line interfaces.
Package cli2 implements a colored text handler suitable for command-line interfaces.
discard
Package discard implements a no-op handler useful for benchmarks and tests.
Package discard implements a no-op handler useful for benchmarks and tests.
es
Package es implements an Elasticsearch batch handler.
Package es implements an Elasticsearch batch handler.
json
Package json implements a JSON handler.
Package json implements a JSON handler.
logfmt
Package logfmt implements a "logfmt" format handler.
Package logfmt implements a "logfmt" format handler.
memory
Package memory implements an in-memory handler useful for testing, as the entries can be accessed after writes.
Package memory implements an in-memory handler useful for testing, as the entries can be accessed after writes.
multi
Package multi implements a handler which invokes a number of handlers.
Package multi implements a handler which invokes a number of handlers.
text
Package text implements a development-friendly textual handler.
Package text implements a development-friendly textual handler.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL