Documentation
¶
Index ¶
Constants ¶
const TimeFormat = "2006-01-02T15:04:05.000Z0700"
The time format to use for logging. This is a version of RFC3339 that contains millisecond precision
Variables ¶
var ( DefaultOutput = os.Stderr DefaultLevel = Info )
var ( // The options used to create the Default logger. These are // read only when the Default logger is created, so set them // as soon as the process starts. DefaultOptions = &LoggerOptions{ Level: DefaultLevel, Output: DefaultOutput, } )
Functions ¶
This section is empty.
Types ¶
type CapturedStacktrace ¶
type CapturedStacktrace string
A stacktrace gathered by a previous call to log.Stacktrace. If passed to a logging function, the stacktrace will be appended.
func Stacktrace ¶
func Stacktrace() CapturedStacktrace
Gather a stacktrace of the current goroutine and return it to be passed to a logging function.
type Format ¶
type Format []interface{}
When processing a value of this type, the logger automatically treats the first argument as a Printf formatting string and passes the rest as the values to be formatted. For example: L.Info(Fmt{"%d beans/day", beans}). This is a simple convience type for when formatting is required.
type Level ¶
type Level int32
const ( // This is a special level used to indicate that no level has been // set and allow for a default to be used. NoLevel Level = 0 // The most verbose level. Intended to be used for the tracing of actions // in code, such as function enters/exits, etc. Trace Level = 1 // For programmer lowlevel analysis. Debug Level = 2 // For information about steady state operations. Info Level = 3 // For information about rare but handled events. Warn Level = 4 // For information about unrecoverable events. Error Level = 5 )
func LevelFromString ¶
LevelFromString returns a Level type for the named log level, or "NoLevel" if the level string is invalid. This facilitates setting the log level via config or environment variable by name in a predictable way.
type Logger ¶
type Logger interface {
// Args are alternating key, val pairs
// keys must be strings
// vals can be any type, but display is implementation specific
// Emit a message and key/value pairs at the TRACE level
Trace(msg string, args ...interface{})
// Emit a message and key/value pairs at the DEBUG level
Debug(msg string, args ...interface{})
// Emit a message and key/value pairs at the INFO level
Info(msg string, args ...interface{})
// Emit a message and key/value pairs at the WARN level
Warn(msg string, args ...interface{})
// Emit a message and key/value pairs at the ERROR level
Error(msg string, args ...interface{})
// Indicate if TRACE logs would be emitted. This and the other Is* guards
// are used to elide expensive logging code based on the current level.
IsTrace() bool
// Indicate if DEBUG logs would be emitted. This and the other Is* guards
IsDebug() bool
// Indicate if INFO logs would be emitted. This and the other Is* guards
IsInfo() bool
// Indicate if WARN logs would be emitted. This and the other Is* guards
IsWarn() bool
// Indicate if ERROR logs would be emitted. This and the other Is* guards
IsError() bool
// Creates a sublogger that will always have the given key/value pairs
With(args ...interface{}) Logger
// Create a logger that will prepend the name string on the front of all messages.
// If the logger already has a name, the new value will be appended to the current
// name. That way, a major subsystem can use this to decorate all it's own logs
// without losing context.
Named(name string) Logger
// Create a logger that will prepend the name string on the front of all messages.
// This sets the name of the logger to the value directly, unlike Named which honor
// the current name as well.
ResetNamed(name string) Logger
// Updates the level. This should affect all sub-loggers as well. If an
// implementation cannot update the level on the fly, it should no-op.
SetLevel(level Level)
// Return a value that conforms to the stdlib log.Logger interface
StandardLogger(opts *StandardLoggerOptions) *log.Logger
// Return a value that conforms to io.Writer, which can be passed into log.SetOutput()
StandardWriter(opts *StandardLoggerOptions) io.Writer
}
The main Logger interface. All code should code against this interface only.
func Default ¶
func Default() Logger
Return a logger that is held globally. This can be a good starting place, and then you can use .With() and .Name() to create sub-loggers to be used in more specific contexts.
func New ¶
func New(opts *LoggerOptions) Logger
Given the options (nil for defaults), create a new Logger
func NewNullLogger ¶
func NewNullLogger() Logger
NewNullLogger instantiates a Logger for which all calls will succeed without doing anything. Useful for testing purposes.
type LoggerOptions ¶
type LoggerOptions struct {
// Name of the subsystem to prefix logs with
Name string
// The threshold for the logger. Anything less severe is supressed
Level Level
// Where to write the logs to. Defaults to os.Stderr if nil
Output io.Writer
// An optional mutex pointer in case Output is shared
Mutex *sync.Mutex
// Control if the output should be in JSON.
JSONFormat bool
// Include file and line information in each log line
IncludeLocation bool
// The time format to use instead of the default
TimeFormat string
}
type StandardLoggerOptions ¶
type StandardLoggerOptions struct {
// Indicate that some minimal parsing should be done on strings to try
// and detect their level and re-emit them.
// This supports the strings like [ERROR], [ERR] [TRACE], [WARN], [INFO],
// [DEBUG] and strip it off before reapplying it.
InferLevels bool
}