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
- Variables
- func InitLog(logFile, errLogFile string)
- func InitLogStdout(logLevel Level)
- func LogAndMeasureExecutionTime(log *Logger, functionName string) (onEnd func())
- func LogMemoryStats(log *Logger, functionName string)
- func ParseAndSetLogLevels(logLevel string) error
- func SetLogLevel(subsystemID string, logLevel string) error
- func SetLogLevels(logLevel Level)
- func SetLogLevelsString(logLevel string) error
- func SupportedSubsystems() []string
- type Backend
- func (b *Backend) AddLogFile(logFile string, logLevel Level) error
- func (b *Backend) AddLogFileWithCustomRotator(logFile string, logLevel Level, thresholdKB int64, maxRolls int) error
- func (b *Backend) AddLogWriter(logWriter io.WriteCloser, logLevel Level) error
- func (b *Backend) Close()
- func (b *Backend) IsRunning() bool
- func (b *Backend) Logger(subsystemTag string) *Logger
- func (b *Backend) Run() error
- type Level
- type LogClosure
- type Logger
- func (l *Logger) Backend() *Backend
- func (l *Logger) Critical(args ...interface{})
- func (l *Logger) Criticalf(format string, args ...interface{})
- func (l *Logger) Debug(args ...interface{})
- func (l *Logger) Debugf(format string, args ...interface{})
- func (l *Logger) Error(args ...interface{})
- func (l *Logger) Errorf(format string, args ...interface{})
- func (l *Logger) Info(args ...interface{})
- func (l *Logger) Infof(format string, args ...interface{})
- func (l *Logger) Level() Level
- func (l *Logger) SetLevel(level Level)
- func (l *Logger) Trace(args ...interface{})
- func (l *Logger) Tracef(format string, args ...interface{})
- func (l *Logger) Warn(args ...interface{})
- func (l *Logger) Warnf(format string, args ...interface{})
- func (l *Logger) Write(logLevel Level, args ...interface{})
- func (l *Logger) Writef(logLevel Level, format string, args ...interface{})
Constants ¶
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 ¶
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 ¶
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 ¶
LogMemoryStats logs memory stats for `functionName`
func ParseAndSetLogLevels ¶
ParseAndSetLogLevels attempts to parse the specified debug level and set the levels accordingly. An appropriate error is returned if anything is invalid.
func SetLogLevel ¶
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 ¶
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 NewBackendWithFlags ¶
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 ¶
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) IsRunning ¶
IsRunning returns true if backend.Run() has been called and false if it hasn't.
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.
Level constants.
func LevelFromString ¶
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.
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 ¶
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) 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 ¶
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 ¶
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 ¶
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 ¶
Infof formats message according to format specifier, prepends the prefix as necessary, and writes to log with LevelInfo.
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 ¶
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 ¶
Warnf formats message according to format specifier, prepends the prefix as necessary, and writes to log with LevelWarn.