nginx-ui/internal/logger/logger.go
2023-11-26 18:59:12 +08:00

103 lines
2.4 KiB
Go

package logger
import (
"github.com/0xJacky/Nginx-UI/settings"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"os"
)
var logger *zap.SugaredLogger
func init() {
// First, define our level-handling logic.
highPriority := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
return lvl >= zapcore.ErrorLevel
})
lowPriority := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
switch settings.ServerSettings.RunMode {
case gin.ReleaseMode:
return lvl >= zapcore.InfoLevel && lvl < zapcore.ErrorLevel
default:
fallthrough
case gin.DebugMode:
return lvl < zapcore.ErrorLevel
}
})
// Directly output to stdout and stderr, and add caller information.
consoleDebugging := zapcore.Lock(os.Stdout)
consoleErrors := zapcore.Lock(os.Stderr)
encoderConfig := zap.NewDevelopmentEncoderConfig()
encoderConfig.EncodeTime = zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05")
encoderConfig.ConsoleSeparator = "\t"
encoderConfig.EncodeLevel = colorLevelEncoder
consoleEncoder := zapcore.NewConsoleEncoder(encoderConfig)
// Join the outputs, encoders, and level-handling functions into
// zapcore.Cores, then tee the two cores together.
core := zapcore.NewTee(
zapcore.NewCore(consoleEncoder, consoleErrors, highPriority),
zapcore.NewCore(consoleEncoder, consoleDebugging, lowPriority),
)
// From a zapcore.Core, it's easy to construct a Logger.
logger = zap.New(core, zap.AddCaller()).WithOptions(zap.AddCallerSkip(1)).Sugar()
}
func Sync() {
_ = logger.Sync()
}
func GetLogger() *zap.SugaredLogger {
return logger
}
func Info(args ...interface{}) {
logger.Infoln(args...)
}
func Error(args ...interface{}) {
logger.Errorln(args...)
}
func Fatal(args ...interface{}) {
logger.Fatalln(args...)
}
func Warn(args ...interface{}) {
logger.Warnln(args...)
}
func Debug(args ...interface{}) {
logger.Debugln(args...)
}
func DPanic(args ...interface{}) {
logger.DPanic(args...)
}
func Infof(format string, args ...interface{}) {
logger.Infof(format, args...)
}
func Errorf(format string, args ...interface{}) {
logger.Errorf(format, args...)
}
func Fatalf(format string, args ...interface{}) {
logger.Fatalf(format, args...)
}
func DPanicf(format string, args ...interface{}) {
logger.DPanicf(format, args...)
}
func Warnf(format string, args ...interface{}) {
logger.Warnf(format, args...)
}
func Debugf(format string, args ...interface{}) {
logger.Debugf(format, args...)
}