log

package module
v0.0.0-...-f3eda25 Latest Latest
Warning

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

Go to latest
Published: Aug 9, 2022 License: MIT Imports: 9 Imported by: 0

README

Tests on Linux, MacOS and Windows Go Report Card GoDoc

This is a fork of the exellent Apex Log library.

Main changes:

  • Trim unneeded dependencies.
  • Make Fields into a slice to preserve log order.
  • Split the old Interface in two and remove all but one Log method (see below).
  • This allows for lazy creation of messages in Log(fmt.Stringer) and ignoring fields added in LevelLoggers with levels below the Loggers.
  • The pointer passed to HandleLog is not safe to use outside of that method, need to be cloned with Clone first if that's needed.
// Logger is the main interface for the logger.
type Logger interface {
	// WithLevel returns a new entry with `level` set.
	WithLevel(Level) *EntryFields
}

// LevelLogger handles logging for a given level.
type LevelLogger interface {
	// Log logs a message at the given level using the string from calling s.String().
	// Note that s.String() will not be called if the level is not enabled.
	Log(s fmt.Stringer)

	// WithLevel returns a new entry with `level` set.
	WithLevel(Level) *EntryFields

	// WithFields returns a new entry with the`fields` in fields set.
	// This is a noop if LevelLogger's level is less than Logger's.
	WithFields(fields Fielder) *EntryFields

	// WithLevel returns a new entry with the field f set with value v
	// This is a noop if LevelLogger's level is less than Logger's.
	WithField(f string, v any) *EntryFields

	// WithDuration returns a new entry with the "duration" field set
	// to the given duration in milliseconds.
	// This is a noop if LevelLogger's level is less than Logger's.
	WithDuration(time.Duration) *EntryFields

	// WithError returns a new entry with the "error" set to `err`.
	// This is a noop if err is nil or  LevelLogger's level is less than Logger's.
	WithError(error) *EntryFields
}

Documentation

Overview

Package log implements a simple structured logging API.

Index

Constants

This section is empty.

Variables

View Source
var ErrInvalidLevel = errors.New("invalid level")

ErrInvalidLevel is returned if the severity level is invalid.

Functions

This section is empty.

Types

type Clock

type Clock interface {
	Now() time.Time
}

Clock provides the current time.

type Entry

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

Entry represents a single log entry at a given log level.

func NewEntry

func NewEntry(log *logger) *Entry

NewEntry returns a new entry for `log`.

func (*Entry) Clone

func (e *Entry) Clone() *Entry

Clone returns a new Entry with the same fields.

func (*Entry) Log

func (e *Entry) Log(s fmt.Stringer)

Log a message at the given level.

func (*Entry) WithDuration

func (e *Entry) WithDuration(d time.Duration) *Entry

func (*Entry) WithError

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

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

The given error may implement .Fielder, if it does the method will add all its `.Fields()` into the returned entry.

func (*Entry) WithField

func (e *Entry) WithField(key string, value any) *Entry

func (*Entry) WithFields

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

func (Entry) WithLevel

func (e Entry) WithLevel(level Level) *Entry

type Field

type Field struct {
	Name  string `json:"name"`
	Value any    `json:"value"`
}

Field holds a named value.

type Fielder

type Fielder interface {
	Fields() Fields
}

Fielder is an interface for providing fields to custom types.

type Fields

type Fields []Field

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

func (Fields) Fields

func (f Fields) Fields() Fields

Fields implements Fielder.

type FieldsFunc

type FieldsFunc func() Fields

func NewFieldsFunc

func NewFieldsFunc(fn func() Fields) FieldsFunc

func (FieldsFunc) Fields

func (f FieldsFunc) Fields() Fields

type Handler

type Handler interface {
	// HandleLog is invoked for each log event.
	// Note that if the Entry is going to be used after the call to HandleLog returns,
	// it must be cloned with Clone().
	HandleLog(e *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.

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 Level

type Level int

Level of severity.

const (
	InvalidLevel Level = iota
	DebugLevel
	InfoLevel
	WarnLevel
	ErrorLevel
)

Log levels.

func MustParseLevel

func MustParseLevel(s string) Level

MustParseLevel parses level string or panics.

func ParseLevel

func ParseLevel(s string) (Level, error)

ParseLevel parses level string.

func (Level) MarshalJSON

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

MarshalJSON implementation.

func (Level) String

func (l Level) String() string

String implementation.

func (*Level) UnmarshalJSON

func (l *Level) UnmarshalJSON(b []byte) error

UnmarshalJSON implementation.

type LevelLogger

type LevelLogger interface {
	// Log logs a message at the given level using the string from calling s.String().
	// Note that s.String() will not be called if the level is not enabled.
	Log(s fmt.Stringer)

	// WithLevel returns a new entry with `level` set.
	WithLevel(Level) *Entry

	// WithFields returns a new entry with the`fields` in fields set.
	// This is a noop if LevelLogger's level is less than Logger's.
	WithFields(fields Fielder) *Entry

	// WithLevel returns a new entry with the field f set with value v
	// This is a noop if LevelLogger's level is less than Logger's.
	WithField(f string, v any) *Entry

	// WithDuration returns a new entry with the "duration" field set
	// to the given duration in milliseconds.
	// This is a noop if LevelLogger's level is less than Logger's.
	WithDuration(time.Duration) *Entry

	// WithError returns a new entry with the "error" set to `err`.
	// This is a noop if err is nil or  LevelLogger's level is less than Logger's.
	WithError(error) *Entry
}

LevelLogger is the logger at a given level.

type Logger

type Logger interface {
	// WithLevel returns a new entry with `level` set.
	WithLevel(Level) *Entry
}

Logger is the main interface for the logger.

func NewLogger

func NewLogger(cfg LoggerConfig) Logger

New returns a new logger.

type LoggerConfig

type LoggerConfig struct {
	// Level is the minimum level to log at.
	// If not set, defaults to InfoLevel.
	Level Level

	// Handler is the log handler to use.
	Handler Handler

	// Clock is the clock to use for timestamps.
	// If not set, the system clock is used.
	Clock Clock
}

LoggerConfig is the configuration used to create a logger.

type String

type String string

String implements fmt.Stringer and can be used directly in the log methods.

func (String) String

func (s String) String() string

type StringFunc

type StringFunc func() string

StringFunc is a function that returns a string. It also implements the fmt.Stringer interface and can therefore be used as argument to the log methods.

func NewStringFunc

func NewStringFunc(f func() string) StringFunc

NewStringFunc returns a StringFunc which implements Stringer.

func (StringFunc) String

func (f StringFunc) String() string

Directories

Path Synopsis
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.
json
Package json implements a JSON handler.
Package json implements a JSON handler.
level
Package level implements a level filter handler.
Package level implements a level filter 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