// // log.go // Copyright (C) 2022 tiglog // // Distributed under terms of the MIT license. // package logger import ( "os" "sync" "time" "github.com/natefinch/lumberjack" "github.com/rs/zerolog" "github.com/rs/zerolog/pkgerrors" ) var once sync.Once var log_path = "./var/log/app.log" var log_level = zerolog.InfoLevel func SetLogPath(path string) { log_path = path } func SetLogLevel(level zerolog.Level) { log_level = level } var log *zerolog.Logger func Get() *zerolog.Logger { once.Do(func() { zerolog.ErrorStackMarshaler = pkgerrors.MarshalStack zerolog.TimeFieldFormat = time.RFC3339Nano fileLogger := &lumberjack.Logger{ Filename: log_path, MaxSize: 5, // MaxBackups: 10, MaxAge: 14, Compress: true, } output := zerolog.MultiLevelWriter(os.Stderr, fileLogger) l := zerolog.New(output). Level(log_level). With(). Timestamp(). Logger() log = &l }) return log } func Debug(msg string) { Get().Debug().Msg(msg) } func Debugf(format string, v ...interface{}) { Get().Debug().Msgf(format, v...) } func Info(msg string) { Get().Info().Msg(msg) } func Infof(format string, v ...interface{}) { Get().Info().Msgf(format, v...) } func Warn(msg string) { Get().Warn().Msg(msg) } func Warnf(format string, v ...interface{}) { Get().Warn().Msgf(format, v...) } func Error(msg string) { Get().Error().Msg(msg) } func Errorf(format string, v ...interface{}) { Get().Error().Msgf(format, v...) }