| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- package logger2
- import (
- cfg "MeterService/core/config"
- "io"
- "log"
- "time"
- rotatelogs "github.com/lestrrat-go/file-rotatelogs"
- "go.uber.org/zap"
- "go.uber.org/zap/zapcore"
- )
- var Logger *zap.Logger
- func InitLogger() {
- config := zapcore.EncoderConfig{
- TimeKey: "ts",
- LevelKey: "level",
- MessageKey: "msg",
- //CallerKey: "file",
- EncodeLevel: zapcore.CapitalLevelEncoder,
- EncodeTime: func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
- enc.AppendString(t.Format("2006-01-02 15:04:05"))
- },
- EncodeDuration: func(duration time.Duration, encoder zapcore.PrimitiveArrayEncoder) {
- encoder.AppendInt64(int64(duration) / 100000000) // nano -> milli
- },
- EncodeCaller: zapcore.ShortCallerEncoder,
- }
- encoder := zapcore.NewConsoleEncoder(config)
- if cfg.C.Logger.LogType == "json" {
- encoder = zapcore.NewJSONEncoder(config)
- }
- fileFormat, saveType, logLevelStr := "%Y%m%d", "one", "info"
- if cfg.C.Logger.FileFormat != "" {
- fileFormat = cfg.C.Logger.FileFormat
- }
- if cfg.C.Logger.Level != "" {
- logLevelStr = cfg.C.Logger.Level
- }
- if cfg.C.Logger.FileType != "" {
- saveType = cfg.C.Logger.FileType
- }
- logLevel := zap.DebugLevel
- switch logLevelStr {
- case "debug":
- logLevel = zap.DebugLevel
- case "info":
- logLevel = zap.InfoLevel
- case "error":
- logLevel = zap.ErrorLevel
- }
- switch saveType {
- case "level":
- Logger = getLevelLogger(encoder, logLevel, fileFormat)
- default:
- Logger = getOneLogger(encoder, logLevel, fileFormat)
- }
- }
- func getLevelLogger(encoder zapcore.Encoder, logLevel zapcore.Level, fileFormat string) *zap.Logger {
- debugLevel := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
- return lvl >= logLevel && lvl == zap.DebugLevel
- })
- infoLevel := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
- return lvl >= logLevel && lvl == zap.InfoLevel
- })
- errorLevel := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
- return lvl >= logLevel && lvl == zap.ErrorLevel
- })
- core := zapcore.NewTee(
- zapcore.NewCore(encoder, zapcore.AddSync(getLoggerWriter("debug", fileFormat)), debugLevel),
- zapcore.NewCore(encoder, zapcore.AddSync(getLoggerWriter("info", fileFormat)), infoLevel),
- zapcore.NewCore(encoder, zapcore.AddSync(getLoggerWriter("error", fileFormat)), errorLevel),
- )
- return zap.New(core, zap.AddCaller(), zap.AddStacktrace(zap.WarnLevel))
- }
- func getOneLogger(encoder zapcore.Encoder, logLevel zapcore.Level, fileFormat string) *zap.Logger {
- core := zapcore.NewCore(encoder, zapcore.AddSync(getLoggerWriter("all", fileFormat)), logLevel)
- return zap.New(core, zap.AddCaller(), zap.AddStacktrace(zap.WarnLevel))
- }
- func getLoggerWriter(filename, fileFormat string) io.Writer {
- filePath, saveDay := "./logs", 30
- if cfg.C.Logger.FilePath != "" {
- filePath = cfg.C.Logger.FilePath
- }
- if cfg.C.Logger.MaxSaveDays > 0 {
- saveDay = cfg.C.Logger.MaxSaveDays
- }
- filename = filePath + "/" + filename
- hook, err := rotatelogs.New(filename+"/"+fileFormat+".log",
- rotatelogs.WithLinkName(filename),
- rotatelogs.WithMaxAge(time.Duration(saveDay)*24*time.Hour),
- rotatelogs.WithRotationTime(24*time.Hour),
- )
- if err != nil {
- log.Println("日志启动异常")
- panic(err)
- }
- return hook
- }
- func Debug(format string, v ...interface{}) {
- if cfg.C.Vber.Mode == "debug" {
- if v == nil {
- Logger.Sugar().Debug(format)
- } else {
- Logger.Sugar().Debugf(format, v...)
- }
- }
- }
- func Info(format string, v ...interface{}) {
- if v == nil {
- Logger.Sugar().Info(format)
- } else {
- Logger.Sugar().Infof(format, v...)
- }
- }
- func Error(format string, v ...interface{}) {
- if v == nil {
- Logger.Sugar().Error(format)
- } else {
- Logger.Sugar().Errorf(format, v...)
- }
- }
|