2022-05-30 04:14:14 +02:00
|
|
|
package log
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
2022-06-01 22:57:35 +02:00
|
|
|
"sync"
|
2022-05-30 04:14:14 +02:00
|
|
|
)
|
|
|
|
|
2023-02-04 04:21:50 +01:00
|
|
|
var (
|
|
|
|
level = InfoLevel
|
|
|
|
format = TextFormat
|
|
|
|
overrides = make(map[string]*levelOverride)
|
|
|
|
mu = &sync.Mutex{}
|
2022-05-30 04:14:14 +02:00
|
|
|
)
|
|
|
|
|
2023-02-04 04:21:50 +01:00
|
|
|
// Fatal prints the given message, and exits the program
|
|
|
|
func Fatal(message string, v ...any) {
|
|
|
|
newEvent().Fatal(message, v...)
|
2022-05-30 04:14:14 +02:00
|
|
|
}
|
|
|
|
|
2023-02-04 04:21:50 +01:00
|
|
|
// Error prints the given message, if the current log level is ERROR or lower
|
|
|
|
func Error(message string, v ...any) {
|
|
|
|
newEvent().Error(message, v...)
|
|
|
|
}
|
2022-05-30 04:14:14 +02:00
|
|
|
|
2023-02-04 04:21:50 +01:00
|
|
|
// Warn prints the given message, if the current log level is WARN or lower
|
|
|
|
func Warn(message string, v ...any) {
|
|
|
|
newEvent().Warn(message, v...)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Info prints the given message, if the current log level is INFO or lower
|
|
|
|
func Info(message string, v ...any) {
|
|
|
|
newEvent().Info(message, v...)
|
2022-06-02 05:24:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Debug prints the given message, if the current log level is DEBUG or lower
|
2022-10-01 22:31:48 +02:00
|
|
|
func Debug(message string, v ...any) {
|
2023-02-04 04:21:50 +01:00
|
|
|
newEvent().Debug(message, v...)
|
2022-05-30 04:14:14 +02:00
|
|
|
}
|
|
|
|
|
2023-02-04 04:21:50 +01:00
|
|
|
// Trace prints the given message, if the current log level is TRACE
|
|
|
|
func Trace(message string, v ...any) {
|
|
|
|
newEvent().Trace(message, v...)
|
2022-05-30 04:14:14 +02:00
|
|
|
}
|
|
|
|
|
2023-02-04 04:21:50 +01:00
|
|
|
func Context(contexts ...Ctx) *Event {
|
|
|
|
return newEvent().Context(contexts...)
|
2022-05-30 04:14:14 +02:00
|
|
|
}
|
|
|
|
|
2023-02-04 04:21:50 +01:00
|
|
|
func Field(key string, value any) *Event {
|
|
|
|
return newEvent().Field(key, value)
|
2022-05-30 04:14:14 +02:00
|
|
|
}
|
|
|
|
|
2023-02-04 04:21:50 +01:00
|
|
|
func Fields(fields map[string]any) *Event {
|
|
|
|
return newEvent().Fields(fields)
|
|
|
|
}
|
|
|
|
|
|
|
|
func Tag(tag string) *Event {
|
|
|
|
return newEvent().Tag(tag)
|
2022-05-30 04:14:14 +02:00
|
|
|
}
|
|
|
|
|
2022-06-01 22:57:35 +02:00
|
|
|
// CurrentLevel returns the current log level
|
|
|
|
func CurrentLevel() Level {
|
|
|
|
mu.Lock()
|
|
|
|
defer mu.Unlock()
|
|
|
|
return level
|
|
|
|
}
|
|
|
|
|
|
|
|
// SetLevel sets a new log level
|
2022-05-30 04:14:14 +02:00
|
|
|
func SetLevel(newLevel Level) {
|
2022-06-01 22:57:35 +02:00
|
|
|
mu.Lock()
|
|
|
|
defer mu.Unlock()
|
2022-05-30 04:14:14 +02:00
|
|
|
level = newLevel
|
|
|
|
}
|
|
|
|
|
2023-02-04 04:21:50 +01:00
|
|
|
// SetLevelOverride adds a log override for the given field
|
|
|
|
func SetLevelOverride(field string, value any, level Level) {
|
|
|
|
mu.Lock()
|
|
|
|
defer mu.Unlock()
|
|
|
|
overrides[field] = &levelOverride{value: value, level: level}
|
2022-06-02 16:50:05 +02:00
|
|
|
}
|
|
|
|
|
2023-02-04 04:21:50 +01:00
|
|
|
// ResetLevelOverride removes all log level overrides
|
|
|
|
func ResetLevelOverride() {
|
|
|
|
mu.Lock()
|
|
|
|
defer mu.Unlock()
|
|
|
|
overrides = make(map[string]*levelOverride)
|
|
|
|
}
|
|
|
|
|
|
|
|
// CurrentFormat returns the current log formt
|
|
|
|
func CurrentFormat() Format {
|
|
|
|
mu.Lock()
|
|
|
|
defer mu.Unlock()
|
|
|
|
return format
|
|
|
|
}
|
|
|
|
|
|
|
|
// SetFormat sets a new log format
|
|
|
|
func SetFormat(newFormat Format) {
|
|
|
|
mu.Lock()
|
|
|
|
defer mu.Unlock()
|
|
|
|
format = newFormat
|
|
|
|
if newFormat == JSONFormat {
|
|
|
|
DisableDates()
|
2022-05-30 04:14:14 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-02-04 04:21:50 +01:00
|
|
|
// DisableDates disables the date/time prefix
|
|
|
|
func DisableDates() {
|
|
|
|
log.SetFlags(0)
|
|
|
|
}
|
|
|
|
|
2022-06-02 05:24:44 +02:00
|
|
|
// Loggable returns true if the given log level is lower or equal to the current log level
|
|
|
|
func Loggable(l Level) bool {
|
|
|
|
return CurrentLevel() <= l
|
|
|
|
}
|
|
|
|
|
|
|
|
// IsTrace returns true if the current log level is TraceLevel
|
|
|
|
func IsTrace() bool {
|
|
|
|
return Loggable(TraceLevel)
|
|
|
|
}
|
|
|
|
|
|
|
|
// IsDebug returns true if the current log level is DebugLevel or below
|
|
|
|
func IsDebug() bool {
|
|
|
|
return Loggable(DebugLevel)
|
|
|
|
}
|