logger

package
v0.4.2 Latest Latest
Warning

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

Go to latest
Published: Dec 20, 2023 License: MIT Imports: 15 Imported by: 26

Documentation

Overview

Package logger defines an interface and default implementation for subsystem logging.

Log level verbosity may be modified at runtime for each individual subsystem logger.

The default implementation in this package must be created by the Backend type. Backends can write to any io.Writer, including multi-writers created by io.MultiWriter. Multi-writers allow log output to be written to many writers, including standard output and log files.

Optional logging behavior can be specified by using the LOGFLAGS environment variable and overridden per-Backend by using the WithFlags call option. Multiple LOGFLAGS options can be specified, separated by commas. The following options are recognized:

longfile: Include the full filepath and line number in all log messages

shortfile: Include the filename and line number in all log messages.
Overrides longfile.

Index

Constants

View Source
const (
	// LogFlagLongFile modifies the logger output to include full path and line number
	// of the logging callsite, e.g. /a/b/c/main.go:123.
	LogFlagLongFile uint32 = 1 << iota

	// LogFlagShortFile modifies the logger output to include filename and line number
	// of the logging callsite, e.g. main.go:123. takes precedence over LogFlagLongFile.
	LogFlagShortFile
)

Flags to modify Backend's behavior.

Variables

View Source
var (
	// BackendLog is the logging backend used to create all subsystem loggers.
	BackendLog = NewBackend()
)

Loggers per subsystem. A single backend logger is created and all subsytem loggers created from it will write to the backend. When adding new subsystems, add the subsystem logger variable here and to the subsystemLoggers map.

Loggers can not be used before the log rotator has been initialized with a log file. This must be performed early during application startup by calling InitLog.

Functions

func InitLog

func InitLog(logFile, errLogFile string)

InitLog attaches log file and error log file to the backend log.

func InitLogStdout

func InitLogStdout(logLevel Level)

InitLogStdout attaches stdout to the backend log and starts the logger.

func LogAndMeasureExecutionTime

func LogAndMeasureExecutionTime(log *Logger, functionName string) (onEnd func())

LogAndMeasureExecutionTime logs that `functionName` has started. The user is expected to defer `onEnd`, which will then log that the function has ended, as well as the time duration the function had ran.

func LogMemoryStats

func LogMemoryStats(log *Logger, functionName string)

LogMemoryStats logs memory stats for `functionName`

func ParseAndSetLogLevels

func ParseAndSetLogLevels(logLevel string) error

ParseAndSetLogLevels attempts to parse the specified debug level and set the levels accordingly. An appropriate error is returned if anything is invalid.

func SetLogLevel

func SetLogLevel(subsystemID string, logLevel string) error

SetLogLevel sets the logging level for provided subsystem. Invalid subsystems are ignored. Uninitialized subsystems are dynamically created as needed.

func SetLogLevels

func SetLogLevels(logLevel Level)

SetLogLevels sets the log level for all subsystem loggers to the passed level. It also dynamically creates the subsystem loggers as needed, so it can be used to initialize the logging system.

func SetLogLevelsString

func SetLogLevelsString(logLevel string) error

SetLogLevelsString the same as SetLogLevels but also parses the level from a string

func SupportedSubsystems

func SupportedSubsystems() []string

SupportedSubsystems returns a sorted slice of the supported subsystems for logging purposes.

Types

type Backend

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

Backend is a logging backend. Subsystems created from the backend write to the backend's Writer. Backend provides atomic writes to the Writer from all subsystems.

func NewBackend

func NewBackend() *Backend

NewBackend creates a new logger backend.

func NewBackendWithFlags

func NewBackendWithFlags(flags uint32) *Backend

NewBackendWithFlags configures a Backend to use the specified flags rather than using the package's defaults as determined through the LOGFLAGS environment variable.

func (*Backend) AddLogFile

func (b *Backend) AddLogFile(logFile string, logLevel Level) error

AddLogFile adds a file which the log will write into on a certain log level with the default log rotation settings. It'll create the file if it doesn't exist.

func (*Backend) AddLogFileWithCustomRotator

func (b *Backend) AddLogFileWithCustomRotator(logFile string, logLevel Level, thresholdKB int64, maxRolls int) error

AddLogFileWithCustomRotator adds a file which the log will write into on a certain log level, with the specified log rotation settings. It'll create the file if it doesn't exist.

func (*Backend) AddLogWriter

func (b *Backend) AddLogWriter(logWriter io.WriteCloser, logLevel Level) error

AddLogWriter adds a type implementing io.WriteCloser which the log will write into on a certain log level with the default log rotation settings. It'll create the file if it doesn't exist.

func (*Backend) Close

func (b *Backend) Close()

Close finalizes all log rotators for this backend

func (*Backend) IsRunning

func (b *Backend) IsRunning() bool

IsRunning returns true if backend.Run() has been called and false if it hasn't.

func (*Backend) Logger

func (b *Backend) Logger(subsystemTag string) *Logger

Logger returns a new logger for a particular subsystem that writes to the Backend b. A tag describes the subsystem and is included in all log messages. The logger uses the info verbosity level by default.

func (*Backend) Run

func (b *Backend) Run() error

Run launches the logger backend in a separate go-routine. should only be called once.

type Level

type Level uint32

Level is the level at which a logger is configured. All messages sent to a level which is below the current level are filtered.

const (
	LevelTrace Level = iota
	LevelDebug
	LevelInfo
	LevelWarn
	LevelError
	LevelCritical
	LevelOff
)

Level constants.

func LevelFromString

func LevelFromString(s string) (l Level, ok bool)

LevelFromString returns a level based on the input string s. If the input can't be interpreted as a valid log level, the info level and false is returned.

func (Level) String

func (l Level) String() string

String returns the tag of the logger used in log messages, or "OFF" if the level will not produce any log output.

type LogClosure

type LogClosure func() string

LogClosure is a closure that can be printed with %s to be used to generate expensive-to-create data for a detailed log level and avoid doing the work if the data isn't printed.

func NewLogClosure

func NewLogClosure(c func() string) LogClosure

NewLogClosure casts a function to a LogClosure. See LogClosure for details.

func (LogClosure) String

func (c LogClosure) String() string

type Logger

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

Logger is a subsystem logger for a Backend.

func RegisterSubSystem

func RegisterSubSystem(subsystem string) *Logger

RegisterSubSystem Registers a new subsystem logger, should be called in a global variable, returns the existing one if the subsystem is already registered

func (*Logger) Backend

func (l *Logger) Backend() *Backend

Backend returns the log backend

func (*Logger) Critical

func (l *Logger) Critical(args ...interface{})

Critical formats message using the default formats for its operands, prepends the prefix as necessary, and writes to log with LevelCritical.

func (*Logger) Criticalf

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

Criticalf formats message according to format specifier, prepends the prefix as necessary, and writes to log with LevelCritical.

func (*Logger) Debug

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

Debug formats message using the default formats for its operands, prepends the prefix as necessary, and writes to log with LevelDebug.

func (*Logger) Debugf

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

Debugf formats message according to format specifier, prepends the prefix as necessary, and writes to log with LevelDebug.

func (*Logger) Error

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

Error formats message using the default formats for its operands, prepends the prefix as necessary, and writes to log with LevelError.

func (*Logger) Errorf

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

Errorf formats message according to format specifier, prepends the prefix as necessary, and writes to log with LevelError.

func (*Logger) Info

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

Info formats message using the default formats for its operands, prepends the prefix as necessary, and writes to log with LevelInfo.

func (*Logger) Infof

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

Infof formats message according to format specifier, prepends the prefix as necessary, and writes to log with LevelInfo.

func (*Logger) Level

func (l *Logger) Level() Level

Level returns the current logging level

func (*Logger) SetLevel

func (l *Logger) SetLevel(level Level)

SetLevel changes the logging level to the passed level.

func (*Logger) Trace

func (l *Logger) Trace(args ...interface{})

Trace formats message using the default formats for its operands, prepends the prefix as necessary, and writes to log with LevelTrace.

func (*Logger) Tracef

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

Tracef formats message according to format specifier, prepends the prefix as necessary, and writes to log with LevelTrace.

func (*Logger) Warn

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

Warn formats message using the default formats for its operands, prepends the prefix as necessary, and writes to log with LevelWarn.

func (*Logger) Warnf

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

Warnf formats message according to format specifier, prepends the prefix as necessary, and writes to log with LevelWarn.

func (*Logger) Write

func (l *Logger) Write(logLevel Level, args ...interface{})

Write formats message using the default formats for its operands, prepends the prefix as necessary, and writes to log with the given logLevel.

func (*Logger) Writef

func (l *Logger) Writef(logLevel Level, format string, args ...interface{})

Writef formats message according to format specifier, prepends the prefix as necessary, and writes to log with the given logLevel.

Jump to

Keyboard shortcuts

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