123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package core
- import (
- "fmt"
- "os"
- "time"
- "github.com/flipped-aurora/gin-vue-admin/server/global"
- "github.com/flipped-aurora/gin-vue-admin/server/utils"
- "go.uber.org/zap"
- "go.uber.org/zap/zapcore"
- )
- var level zapcore.Level
- func Zap() (logger *zap.Logger) {
- if ok, _ := utils.PathExists(global.GVA_CONFIG.Zap.Director); !ok { // 判断是否有Director文件夹
- fmt.Printf("create %v directory\n", global.GVA_CONFIG.Zap.Director)
- _ = os.Mkdir(global.GVA_CONFIG.Zap.Director, os.ModePerm)
- }
- switch global.GVA_CONFIG.Zap.Level { // 初始化配置文件的Level
- case "debug":
- level = zap.DebugLevel
- case "info":
- level = zap.InfoLevel
- case "warn":
- level = zap.WarnLevel
- case "error":
- level = zap.ErrorLevel
- case "dpanic":
- level = zap.DPanicLevel
- case "panic":
- level = zap.PanicLevel
- case "fatal":
- level = zap.FatalLevel
- default:
- level = zap.InfoLevel
- }
- if level == zap.DebugLevel || level == zap.ErrorLevel {
- logger = zap.New(getEncoderCore(), zap.AddStacktrace(level))
- } else {
- logger = zap.New(getEncoderCore())
- }
- if global.GVA_CONFIG.Zap.ShowLine {
- logger = logger.WithOptions(zap.AddCaller())
- }
- return logger
- }
- // getEncoderConfig 获取zapcore.EncoderConfig
- func getEncoderConfig() (config zapcore.EncoderConfig) {
- config = zapcore.EncoderConfig{
- MessageKey: "message",
- LevelKey: "level",
- TimeKey: "time",
- NameKey: "logger",
- CallerKey: "caller",
- StacktraceKey: global.GVA_CONFIG.Zap.StacktraceKey,
- LineEnding: zapcore.DefaultLineEnding,
- EncodeLevel: zapcore.LowercaseLevelEncoder,
- EncodeTime: CustomTimeEncoder,
- EncodeDuration: zapcore.SecondsDurationEncoder,
- EncodeCaller: zapcore.FullCallerEncoder,
- }
- switch {
- case global.GVA_CONFIG.Zap.EncodeLevel == "LowercaseLevelEncoder": // 小写编码器(默认)
- config.EncodeLevel = zapcore.LowercaseLevelEncoder
- case global.GVA_CONFIG.Zap.EncodeLevel == "LowercaseColorLevelEncoder": // 小写编码器带颜色
- config.EncodeLevel = zapcore.LowercaseColorLevelEncoder
- case global.GVA_CONFIG.Zap.EncodeLevel == "CapitalLevelEncoder": // 大写编码器
- config.EncodeLevel = zapcore.CapitalLevelEncoder
- case global.GVA_CONFIG.Zap.EncodeLevel == "CapitalColorLevelEncoder": // 大写编码器带颜色
- config.EncodeLevel = zapcore.CapitalColorLevelEncoder
- default:
- config.EncodeLevel = zapcore.LowercaseLevelEncoder
- }
- return config
- }
- // getEncoder 获取zapcore.Encoder
- func getEncoder() zapcore.Encoder {
- if global.GVA_CONFIG.Zap.Format == "json" {
- return zapcore.NewJSONEncoder(getEncoderConfig())
- }
- return zapcore.NewConsoleEncoder(getEncoderConfig())
- }
- // getEncoderCore 获取Encoder的zapcore.Core
- func getEncoderCore() (core zapcore.Core) {
- writer, err := utils.GetWriteSyncer() // 使用file-rotatelogs进行日志分割
- if err != nil {
- fmt.Printf("Get Write Syncer Failed err:%v", err.Error())
- return
- }
- return zapcore.NewCore(getEncoder(), writer, level)
- }
- // 自定义日志输出时间格式
- func CustomTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
- enc.AppendString(t.Format(global.GVA_CONFIG.Zap.Prefix + "2006/01/02 - 15:04:05.000"))
- }
|