package logger import ( "io" "os" jsoniter "github.com/json-iterator/go" "github.com/rs/zerolog" "github.com/samber/lo" ) var logger *zerolog.Logger func init() { var writers []io.Writer writers = append(writers, zerolog.ConsoleWriter{Out: os.Stderr}) writers = append(writers, newRollingWriter()) mw := io.MultiWriter(writers...) logger = lo.ToPtr(zerolog.New(mw).With().Timestamp().Logger()) logger.Info().Msg("Logger initialized.") } func GetLogger() *zerolog.Logger { return logger } func Panic() *zerolog.Event { return logger.Panic() } func Fatal() *zerolog.Event { return logger.Fatal() } func Error() *zerolog.Event { return logger.Error() } func Warn() *zerolog.Event { return logger.Warn() } func Info() *zerolog.Event { return logger.Info() } func Debug() *zerolog.Event { return logger.Debug() } func Trace() *zerolog.Event { return logger.Trace() } func Print(v ...interface{}) { logger.Print(v...) } func Printf(format string, v ...interface{}) { logger.Printf(format, v...) } func With() zerolog.Context { return logger.With() } func FormatAny(v interface{}) string { b, err := jsoniter.MarshalToString(v) if err != nil { logger.Error().Str("process", "log").Err(err).Stack().Msg("Value marshal failed.") return "" } return b }