xlog – github.com/hlandau/xlog Index | Files

package xlog

import "github.com/hlandau/xlog"

Package xlog provides a hierarchical, configurable logging system suitable for use in libraries.

Index

Functions

func New

func New(name string) (Logger, Site)

Creates a new logger.

While there are no particular restrictions on facility names, the preferred convention for the facility name is a dot-separated hierarchy of words matching [a-zA-Z0-9_-]+. Hyphens are preferred over underscores, and uppercase should be avoided in most cases.

The facility name should reflect the package and, if the package's status as a subpackage is of particular significance or grouping is desirable, a parent package.

For example, if you have a package foo which has 10 subpackages which implement different parts of foo, you might give them facility names like "foo.alpha", "foo.beta", "foo.gamma", etc.

Typical usage:

var log, Log = xlog.New("facility name")

func NewQuiet

func NewQuiet(name string) (Logger, Site)

Like New, but the created logger by default doesn't output anything but the most severe errors. Intended for use by libraries so that consuming code needs to opt in to log output by that library.

func NewUnder

func NewUnder(name string, site Site) (Logger, Site)

Creates a logger which is subordinate to another logger.

All log messages will be forwarded through the parent logger, meaning that any filtration or forwarding settings set on the parent logger will also apply to this one.

The name of the logger is formed by appending the name given to the name of the parent logger and ".". If site is nil, behaves like New().

func VisitSites

func VisitSites(siteFunc func(s Site) error) error

Calls a function for every Site which has been created.

Do not attempt to create new loggers from the callback.

Types

type LogClosure

type LogClosure func() string

LogClosure can be used to pass a function that returns a string to a log method call. This is useful if the computation of a log message is expensive and the message will often be filtered.

func (LogClosure) String

func (c LogClosure) String() string

type Logger

type Logger struct {
	Sink
}

Logger is the interface exposed to the internals of a package, which uses it to log messages. This is the other side of a Site.

The 'f' functions work like Printf. The suffix-free functions work like 'Print'. The 'e' functions are no-ops if nil is passed for the error; otherwise, they print the error as well as the arguments specified.

Fatal calls os.Exit(1) like "log", and Panic panics. Both emit Critical-severity log messages before doing so.

func (Logger) Alert

func (l Logger) Alert(params ...interface{})

func (Logger) Alerte

func (l Logger) Alerte(err error, params ...interface{})

func (Logger) Alertef

func (l Logger) Alertef(err error, format string, params ...interface{})

func (Logger) Alertf

func (l Logger) Alertf(format string, params ...interface{})

func (Logger) Critical

func (l Logger) Critical(params ...interface{})

func (Logger) Criticale

func (l Logger) Criticale(err error, params ...interface{})

func (Logger) Criticalef

func (l Logger) Criticalef(err error, format string, params ...interface{})

func (Logger) Criticalf

func (l Logger) Criticalf(format string, params ...interface{})

func (Logger) Debug

func (l Logger) Debug(params ...interface{})

func (Logger) Debuge

func (l Logger) Debuge(err error, params ...interface{})

func (Logger) Debugef

func (l Logger) Debugef(err error, format string, params ...interface{})

func (Logger) Debugf

func (l Logger) Debugf(format string, params ...interface{})

func (Logger) Emergency

func (l Logger) Emergency(params ...interface{})

func (Logger) Emergencye

func (l Logger) Emergencye(err error, params ...interface{})

func (Logger) Emergencyef

func (l Logger) Emergencyef(err error, format string, params ...interface{})

func (Logger) Emergencyf

func (l Logger) Emergencyf(format string, params ...interface{})

func (Logger) Error

func (l Logger) Error(params ...interface{})

func (Logger) Errore

func (l Logger) Errore(err error, params ...interface{})

func (Logger) Erroref

func (l Logger) Erroref(err error, format string, params ...interface{})

func (Logger) Errorf

func (l Logger) Errorf(format string, params ...interface{})

func (Logger) Fatal

func (l Logger) Fatal(params ...interface{})

func (Logger) Fatale

func (l Logger) Fatale(err error, params ...interface{})

func (Logger) Fatalef

func (l Logger) Fatalef(err error, format string, params ...interface{})

func (Logger) Fatalf

func (l Logger) Fatalf(format string, params ...interface{})

func (Logger) Info

func (l Logger) Info(params ...interface{})

func (Logger) Infoe

func (l Logger) Infoe(err error, params ...interface{})

func (Logger) Infoef

func (l Logger) Infoef(err error, format string, params ...interface{})

func (Logger) Infof

func (l Logger) Infof(format string, params ...interface{})

func (Logger) Notice

func (l Logger) Notice(params ...interface{})

func (Logger) Noticee

func (l Logger) Noticee(err error, params ...interface{})

func (Logger) Noticeef

func (l Logger) Noticeef(err error, format string, params ...interface{})

func (Logger) Noticef

func (l Logger) Noticef(format string, params ...interface{})

func (Logger) Panic

func (l Logger) Panic(params ...interface{})

func (Logger) Panice

func (l Logger) Panice(err error, params ...interface{})

func (Logger) Panicef

func (l Logger) Panicef(err error, format string, params ...interface{})

func (Logger) Panicf

func (l Logger) Panicf(format string, params ...interface{})

func (Logger) ReceiveLocallye

func (l Logger) ReceiveLocallye(severity Severity, err error, format string, params ...interface{})

func (Logger) Trace

func (l Logger) Trace(params ...interface{})

func (Logger) Tracee

func (l Logger) Tracee(err error, params ...interface{})

func (Logger) Traceef

func (l Logger) Traceef(err error, format string, params ...interface{})

func (Logger) Tracef

func (l Logger) Tracef(format string, params ...interface{})

func (Logger) Warn

func (l Logger) Warn(params ...interface{})

func (Logger) Warne

func (l Logger) Warne(err error, params ...interface{})

func (Logger) Warnef

func (l Logger) Warnef(err error, format string, params ...interface{})

func (Logger) Warnf

func (l Logger) Warnf(format string, params ...interface{})

type MultiSink

type MultiSink struct {
	// contains filtered or unexported fields
}

A sink which dispatches to zero or more other sinks.

var RootSink MultiSink

The sink which is used by default by the root logger.

func (*MultiSink) Add

func (ms *MultiSink) Add(sink Sink)

Add a sink to the MultiSink. Idempotent.

func (*MultiSink) ReceiveFromChild

func (ms *MultiSink) ReceiveFromChild(sev Severity, format string, params ...interface{})

(Implements Sink.)

func (*MultiSink) ReceiveLocally

func (ms *MultiSink) ReceiveLocally(sev Severity, format string, params ...interface{})

(Implements Sink.)

func (*MultiSink) Remove

func (ms *MultiSink) Remove(sink Sink)

Remove a sink from the MultiSink. Idempotent.

type Severity

type Severity int

Log message severity. This is the syslog severity order.

Note that Emergency and Alert are system-level severities. Generally speaking, application programs should not emit log messages at such severities unless they are programs which monitor the system for system-level issues. i.e., programs should never emit Emergency or Alert messages regarding issues with their own operation.

Programs suffering from critical failures should emit log messages at the Critical severity. The Panic*() and Fatal*() log message functions in this package emit log messages at the Critical level.

The Error severity should be used when errors occur which do not constitute a critical or unrecoverable failure of the program.

Any severity less severe than Debug is not part of the syslog severity order. These are converted to messages of Debug severity when exported to e.g. syslog.

Trace should be used for extremely verbose debugging information which is likely to be used mainly for debugging and is of such verbosity that it may overwhelm a programmer unless enabled only for a few specific facilities.

const (
	SevEmergency Severity = iota
	SevAlert
	SevCritical
	SevError
	SevWarn
	SevNotice
	SevInfo
	SevDebug
	SevTrace
	SevNone Severity = -1 // (Do not use.)
)

func ParseSeverity

func ParseSeverity(severity string) (s Severity, ok bool)

Parse a severity string.

func (Severity) String

func (severity Severity) String() string

Returns the severity as an uppercase unabbreviated string.

func (Severity) Syslog

func (severity Severity) Syslog() Severity

Returns the syslog-compatible severity. Converts severities less severe than Debug to Debug.

type Sink

type Sink interface {
	ReceiveLocally(sev Severity, format string, params ...interface{})
	ReceiveFromChild(sev Severity, format string, params ...interface{})
}

Sink is implemented by objects that can receive log messages from loggers deeper in the hierarchy.

var NullSink Sink

The null sink. All log messages to this sink will be discarded.

type Site

type Site interface {
	// The facility name.
	Name() string

	// Sets the severity condition.
	SetSeverity(severity Severity)

	// Set the sink which will receive all messages from this logger.
	SetSink(sink Sink)
}

Site is the interface exposed to the externals of a package, which uses it to configure the logger. This is the other side of a Logger.

var Root Site = rootLogger

The root logger.

type SyslogSink

type SyslogSink struct {
	// contains filtered or unexported fields
}

A sink that logs to a "log/syslog".Writer-like interface.

func NewSyslogSink

func NewSyslogSink(syslogger Syslogger) *SyslogSink

Create a new syslog sink. "log/syslog".Writer implements Syslogger.

func (*SyslogSink) ReceiveFromChild

func (ss *SyslogSink) ReceiveFromChild(sev Severity, format string, params ...interface{})

func (*SyslogSink) ReceiveLocally

func (ss *SyslogSink) ReceiveLocally(sev Severity, format string, params ...interface{})

func (*SyslogSink) SetSeverity

func (ss *SyslogSink) SetSeverity(sev Severity)

type Syslogger

type Syslogger interface {
	Alert(m string) error
	Crit(m string) error
	Debug(m string) error
	Emerg(m string) error
	Err(m string) error
	Info(m string) error
	Notice(m string) error
	Warning(m string) error
}

Interface compatible with "log/syslog".Writer.

type WriterSink

type WriterSink struct {
	Systemd bool // Use systemd-format output: "<3>some-log-message"
	// contains filtered or unexported fields
}

Sink which writes each log message on a line to an io.Writer.

var StderrSink *WriterSink

A sink which writes to stderr. This is added to the root sink by default.

func NewWriterSink

func NewWriterSink(w io.Writer) *WriterSink

func (*WriterSink) ReceiveFromChild

func (ws *WriterSink) ReceiveFromChild(sev Severity, format string, params ...interface{})

func (*WriterSink) ReceiveLocally

func (ws *WriterSink) ReceiveLocally(sev Severity, format string, params ...interface{})

func (*WriterSink) SetSeverity

func (ws *WriterSink) SetSeverity(sev Severity)

Source Files

logger.go multisink.go severity.go syslogsink.go terminal.go writersink.go xlog.go

Version
v1.0.0 (latest)
Published
Mar 28, 2016
Platform
linux/amd64
Imports
8 packages
Last checked
1 month ago

Tools for package owners.