欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Golang日志模块之xlog

Golang日志模块之xlog

2025/4/26 21:46:20 来源:https://blog.csdn.net/SampsonKong/article/details/147522051  浏览:    关键词:Golang日志模块之xlog

基于douyu的xlog

依赖

github.com/douyu/jupiter/pkg/xlog
go.uber.org/zap
gopkg.in/natefinch/lumberjack.v2

log相关结构体

types/log.go

type Log struct {Env              string `toml:"env"`InfoLogFileName  string `toml:"infoLogFileName"`ErrorLogFileName string `toml:"errorLogFileName"`MaxSize          uint32 `toml:"maxSize"`MaxBackups       uint32 `toml:"maxBackups"`MaxAge           uint32 `toml:"maxAge"`Dir              string `toml:"dir"`Level            string `toml:"level"`
}

配置文件

config/config.toml

[log]
env = "dev"
infoLogFileName = "info.log"
errorLogFileName = "error.log"
maxSize = 50
maxBackups = 20
maxAge = 7
dir = "./logs/"
level = "info"

解析toml配置文件

config/config.go

package configimport ("your-system/types""github.com/BurntSushi/toml"
)var Conf Config// Config 定义一个结构体接收toml所有配置
type Config struct {Log types.Log
}func ConfParse() {configPath := "./config/config.toml"if _, err := toml.DecodeFile(configPath, &Conf); err != nil {xlog.Error("get conf failed", xlog.Any("err", err))panic(err)}
}

xlog 初始化

log/log.go

package logimport ("fmt""os""your-system/types""strings""time""github.com/douyu/jupiter/pkg/xlog""go.uber.org/zap""go.uber.org/zap/zapcore""gopkg.in/natefinch/lumberjack.v2"
)
func InitLogger(log *types.Log) {// 获取 info、error日志文件的io.Writer 抽象 getFileLogWriter() 在下方实现infoWriteSyncer := getLogWriter(log, log.InfoLogFileName)errorWriteSyncer := getLogWriter(log, log.ErrorLogFileName)encoder := getEncoder()level := getLevel(log.Level)// 初始化 cores 切片var cores []zapcore.Core// 如果不是生产环境,添加控制台输出fmt.Println(strings.ToLower(log.Env))if strings.ToLower(log.Env) != "prd" {cores = append(cores,zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), zapcore.DebugLevel), // 打印到控制台)}cores = append(cores,// 向文件写日志, 生产环境不往控制台输出,生产环境记得改成Infozapcore.NewCore(encoder, zapcore.AddSync(infoWriteSyncer), level),zapcore.NewCore(encoder, zapcore.AddSync(errorWriteSyncer), zapcore.ErrorLevel),)core := zapcore.NewTee(cores...)logger := zap.New(core, zap.AddCaller())xlog.SetDefault(logger)
}func getLogWriter(log *types.Log, logFileName string) zapcore.WriteSyncer {lumberJackLogger := &lumberjack.Logger{Filename:   fmt.Sprintf("%s%s", log.Dir, logFileName),MaxSize:    int(log.MaxSize),MaxBackups: int(log.MaxBackups),MaxAge:     int(log.MaxAge),LocalTime:  true,Compress:   false, //是否压缩/归档旧文件}syncFile := zapcore.AddSync(lumberJackLogger) // 打印到文件return zapcore.NewMultiWriteSyncer(syncFile)
}// 负责设置 encoding 的日志格式
func getEncoder() zapcore.Encoder {encoderConfig := zap.NewProductionEncoderConfig()// 序列化时间。eg: 2006-01-02 15:04:05.00encoderConfig.EncodeTime = cEncodeTimeencoderConfig.TimeKey = "time"encoderConfig.EncodeDuration = zapcore.SecondsDurationEncoder// 将Level序列化为全大写字符串。例如,将info level序列化为INFO。encoderConfig.EncodeLevel = cEncodeLevel// 以 package/file:行 的格式 序列化调用程序,从完整路径中删除除最后一个目录外的所有目录。encoderConfig.EncodeCaller = cEncodeCallerreturn zapcore.NewConsoleEncoder(encoderConfig)
}// cEncodeLevel 自定义日志级别显示
func cEncodeLevel(level zapcore.Level, enc zapcore.PrimitiveArrayEncoder) {zapcore.CapitalLevelEncoder(level, enc)
}// cEncodeTime 自定义时间格式显示
func cEncodeTime(t time.Time, enc zapcore.PrimitiveArrayEncoder) {enc.AppendString("[" + t.Format("2006-01-02 15:04:05.000") + "]")
}// cEncodeCaller 自定义行号显示
func cEncodeCaller(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) {enc.AppendString("[" + caller.TrimmedPath() + "]")
}func getLevel(level string) zapcore.Level {switch strings.ToLower(level) {case "debug":return zapcore.DebugLevelcase "info":return zapcore.InfoLevelcase "warn":return zapcore.WarnLevelcase "error":return zapcore.ErrorLevelcase "panic":return zapcore.PanicLevelcase "fata":return zapcore.FatalLeveldefault:return zapcore.DebugLevel}
}

主入口文件

main.go

package mainimport ("your-system/config""strings""time""github.com/douyu/jupiter/pkg/xlog"
)
func main(){config.ConfParse()log.InitLogger(&config.Conf.Log)object := xlog.Error("ErrorMsg ", xlog.Any("object", config.Conf.Log), xlog.String("string", "123123"))
}

在其他地方使用的时候,只需要 import “github.com/douyu/jupiter/pkg/xlog”,使用类似 xlog.Error("ErrorMsg ", xlog.Any(“object”, config.Conf.Log), xlog.String(“string”, “123123”)) 语法即可

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词