164 lines
3.2 KiB
Go
164 lines
3.2 KiB
Go
package logger
|
|
|
|
// LogFormat is format type
|
|
type LogFormat string
|
|
|
|
const (
|
|
TextFormat LogFormat = "text"
|
|
JSONFormat LogFormat = "json"
|
|
)
|
|
|
|
// LogLevel is Logger Level type
|
|
type LogLevel string
|
|
|
|
const (
|
|
// TraceLevel has more verbose message than debug level
|
|
TraceLevel LogLevel = "trace"
|
|
// DebugLevel has verbose message
|
|
DebugLevel LogLevel = "debug"
|
|
// InfoLevel is default log level
|
|
InfoLevel LogLevel = "info"
|
|
// WarnLevel is for logging messages about possible issues
|
|
WarnLevel LogLevel = "warn"
|
|
// ErrorLevel is for logging errors
|
|
ErrorLevel LogLevel = "error"
|
|
// FatalLevel is for logging fatal messages. The system shuts down after logging the message.
|
|
FatalLevel LogLevel = "fatal"
|
|
)
|
|
|
|
type Logger interface {
|
|
WithFields(map[string]any) Logger
|
|
Trace(args ...any)
|
|
Tracef(format string, args ...any)
|
|
Debug(args ...any)
|
|
Debugf(format string, args ...any)
|
|
Info(args ...any)
|
|
Infof(format string, args ...any)
|
|
Warn(args ...any)
|
|
Warnf(format string, args ...any)
|
|
Error(args ...any)
|
|
Errorf(format string, args ...any)
|
|
Fatal(args ...any)
|
|
Fatalf(format string, args ...any)
|
|
GetLevel() LogLevel
|
|
IsLevelEnabled(level LogLevel) bool
|
|
}
|
|
|
|
var (
|
|
defaultLogger Logger
|
|
)
|
|
|
|
func Default() Logger {
|
|
return defaultLogger
|
|
}
|
|
|
|
func SetDefault(logger Logger) {
|
|
defaultLogger = logger
|
|
}
|
|
|
|
type loggerGroup struct {
|
|
loggers []Logger
|
|
}
|
|
|
|
func LoggerGroup(loggers ...Logger) Logger {
|
|
return &loggerGroup{
|
|
loggers: loggers,
|
|
}
|
|
}
|
|
|
|
func (l *loggerGroup) WithFields(m map[string]any) Logger {
|
|
lg := &loggerGroup{}
|
|
for i := range l.loggers {
|
|
lg.loggers = append(lg.loggers, l.loggers[i].WithFields(m))
|
|
}
|
|
return lg
|
|
}
|
|
|
|
func (l *loggerGroup) Trace(args ...any) {
|
|
for _, lg := range l.loggers {
|
|
lg.Trace(args...)
|
|
}
|
|
}
|
|
|
|
func (l *loggerGroup) Tracef(format string, args ...any) {
|
|
for _, lg := range l.loggers {
|
|
lg.Tracef(format, args...)
|
|
}
|
|
}
|
|
|
|
func (l *loggerGroup) Debug(args ...any) {
|
|
for _, lg := range l.loggers {
|
|
lg.Debug(args...)
|
|
}
|
|
}
|
|
|
|
func (l *loggerGroup) Debugf(format string, args ...any) {
|
|
for _, lg := range l.loggers {
|
|
lg.Debugf(format, args...)
|
|
}
|
|
}
|
|
|
|
func (l *loggerGroup) Info(args ...any) {
|
|
for _, lg := range l.loggers {
|
|
lg.Info(args...)
|
|
}
|
|
}
|
|
|
|
func (l *loggerGroup) Infof(format string, args ...any) {
|
|
for _, lg := range l.loggers {
|
|
lg.Infof(format, args...)
|
|
}
|
|
}
|
|
|
|
func (l *loggerGroup) Warn(args ...any) {
|
|
for _, lg := range l.loggers {
|
|
lg.Warn(args...)
|
|
}
|
|
}
|
|
|
|
func (l *loggerGroup) Warnf(format string, args ...any) {
|
|
for _, lg := range l.loggers {
|
|
lg.Warnf(format, args...)
|
|
}
|
|
}
|
|
|
|
func (l *loggerGroup) Error(args ...any) {
|
|
for _, lg := range l.loggers {
|
|
lg.Error(args...)
|
|
}
|
|
}
|
|
|
|
func (l *loggerGroup) Errorf(format string, args ...any) {
|
|
for _, lg := range l.loggers {
|
|
lg.Errorf(format, args...)
|
|
}
|
|
}
|
|
|
|
func (l *loggerGroup) Fatal(args ...any) {
|
|
for _, lg := range l.loggers {
|
|
lg.Fatal(args...)
|
|
}
|
|
}
|
|
|
|
func (l *loggerGroup) Fatalf(format string, args ...any) {
|
|
for _, lg := range l.loggers {
|
|
lg.Fatalf(format, args...)
|
|
}
|
|
}
|
|
|
|
func (l *loggerGroup) GetLevel() LogLevel {
|
|
for _, lg := range l.loggers {
|
|
return lg.GetLevel()
|
|
}
|
|
return InfoLevel
|
|
}
|
|
|
|
func (l *loggerGroup) IsLevelEnabled(level LogLevel) bool {
|
|
for _, lg := range l.loggers {
|
|
if lg.IsLevelEnabled(level) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|