logger/logger.go

151 lines
4.3 KiB
Go

package logger
import (
"errors"
"fmt"
"strings"
)
// LogLevel represents a log level
type LogLevel uint8
// Log levels
const (
LogLevelDebug LogLevel = iota
LogLevelInfo
LogLevelWarn
LogLevelError
LogLevelFatal
LogLevelPanic
)
var logLevelNames = [...]string{
LogLevelDebug: "debug",
LogLevelInfo: "info",
LogLevelWarn: "warn",
LogLevelError: "error",
LogLevelFatal: "fatal",
LogLevelPanic: "panic",
}
// ErrNoSuchLevel is returned when ParseLogLevel cannot find
// a log level corresponding to the provided string
var ErrNoSuchLevel = errors.New("no such log level")
// ParseLogLevel parses a string representing a log level
// and returns the proper log level
func ParseLogLevel(s string) (LogLevel, error) {
for lvl, name := range logLevelNames {
if strings.EqualFold(name, s) {
return LogLevel(lvl), nil
}
}
return 254, ErrNoSuchLevel
}
// Logger represents a logger
type Logger interface {
// NoPanic prevents the logger from panicking on panic events
NoPanic()
// NoExit prevents the logger from exiting on fatal events
NoExit()
// SetLevel sets the log level of the logger
SetLevel(LogLevel)
// Debug creates a new debug event with the given message
Debug(string) LogBuilder
// Debugf creates a new debug event with the formatted message
Debugf(string, ...any) LogBuilder
// Info creates a new info event with the given message
Info(string) LogBuilder
// Infof creates a new info event with the formatted message
Infof(string, ...any) LogBuilder
// Warn creates a new warn event with the given message
Warn(string) LogBuilder
// Warnf creates a new warn event with the formatted message
Warnf(string, ...any) LogBuilder
// Error creates a new error event with the given message
Error(string) LogBuilder
// Errorf creates a new error event with the formatted message
Errorf(string, ...any) LogBuilder
// Fatal creates a new fatal event with the given message
//
// When sent, fatal events will cause a call to os.Exit(1)
Fatal(string) LogBuilder
// Fatalf creates a new fatal event with the formatted message
//
// When sent, fatal events will cause a call to os.Exit(1)
Fatalf(string, ...any) LogBuilder
// Panic creates a new panic event with the given message
//
// When sent, panic events will cause a panic
Panic(string) LogBuilder
// Panicf creates a new panic event with the formatted message
//
// When sent, panic events will cause a panic
Panicf(string, ...any) LogBuilder
}
// LogBuilder represents a log event builder
type LogBuilder interface {
// Int adds an int field to the output
Int(string, int) LogBuilder
// Int8 adds an int8 field to the output
Int8(string, int8) LogBuilder
// Int16 adds an int16 field to the output
Int16(string, int16) LogBuilder
// Int32 adds an int32 field to the output
Int32(string, int32) LogBuilder
// Int64 adds an int64 field to the output
Int64(string, int64) LogBuilder
// Uint adds a uint field to the output
Uint(string, uint) LogBuilder
// Uint8 adds a uint8 field to the output
Uint8(string, uint8) LogBuilder
// Uint16 adds a uint16 field to the output
Uint16(string, uint16) LogBuilder
// Uint32 adds a uint32 field to the output
Uint32(string, uint32) LogBuilder
// Uint64 adds a uint64 field to the output
Uint64(string, uint64) LogBuilder
// Float32 adds a float32 field to the output
Float32(string, float32) LogBuilder
// Float64 adds a float64 field to the output
Float64(string, float64) LogBuilder
// Stringer calls the String method of an fmt.Stringer
// and adds the resulting string as a field to the output
Stringer(string, fmt.Stringer) LogBuilder
// Bytes adds []byte as a field to the output
Bytes(string, []byte) LogBuilder
// Timestamp adds the time formatted as RFC3339Nano
// as a field to the output using the key "timestamp"
Timestamp() LogBuilder
// Bool adds a bool as a field to the output
Bool(string, bool) LogBuilder
// Str adds a string as a field to the output
Str(string, string) LogBuilder
// Any uses reflection to marshal any type and writes
// the result as a field to the output. This is much slower
// than the type-specific functions.
Any(string, any) LogBuilder
// Err adds an error as a field to the output
Err(error) LogBuilder
// Send sends the event to the output.
//
// After calling send, do not use the event again.
Send()
}