Files
go-simple-graphql/pkg/logging/logging.go
T

73 lines
1.7 KiB
Go

package logging
import (
"fmt"
stdlog "log"
"os"
"time"
"github.com/rs/zerolog"
)
type LogConfig struct {
DefaultOutput *os.File
Logger zerolog.Logger
}
func NewLogger() *LogConfig {
log := new(LogConfig)
dll := os.Getenv("LOG_LEVEL")
if dll == "debug" {
zerolog.SetGlobalLevel(zerolog.DebugLevel)
} else if dll == "warn" {
zerolog.SetGlobalLevel(zerolog.WarnLevel)
} else if dll == "error" {
zerolog.SetGlobalLevel(zerolog.ErrorLevel)
} else {
zerolog.SetGlobalLevel(zerolog.InfoLevel)
}
zerolog.TimeFieldFormat = time.RFC3339
zerolog.MessageFieldName = "short_message"
zerolog.TimestampFieldName = "timestamp"
zerolog.LevelFatalValue = "critical"
log.Logger = log.Logger.With().Timestamp().Logger()
stdlog.SetFlags(0)
stdlog.SetOutput(log.Logger)
return log
}
func (l *LogConfig) Log(level zerolog.Level, message string, v ...map[string]interface{}) {
contextLog := l.Logger.WithLevel(level)
if len(v) > 0 {
for _, m := range v {
for k, v := range m {
if v != nil && k != "" {
contextLog.Str(k, fmt.Sprintf("%v", v))
}
}
}
}
// contextLog.Str("_stack_trace", pandati.Trace())
contextLog.Msg(message)
}
func (l *LogConfig) Critical(message string, v ...map[string]interface{}) {
l.Log(zerolog.FatalLevel, message, v...)
}
func (l *LogConfig) Error(message string, v ...map[string]interface{}) {
l.Log(zerolog.ErrorLevel, message, v...)
}
func (l *LogConfig) Warning(message string, v ...map[string]interface{}) {
l.Log(zerolog.WarnLevel, message, v...)
}
func (l *LogConfig) Info(message string, v ...map[string]interface{}) {
l.Log(zerolog.InfoLevel, message, v...)
}
func (l *LogConfig) Debug(message string, v ...map[string]interface{}) {
l.Log(zerolog.DebugLevel, message, v...)
}