1、安装
go get github.com/sirupsen/logrus
go get gopkg.in/natefinch/lumberjack.v2
var Logger = logrus.New()
func SetLogrus(logConf conf.LogConfig) {
Logger.SetLevel(GetLevel(logConf.Level))
Logger.SetReportCaller(true)
Logger.SetFormatter(&logrus.JSONFormatter{
TimestampFormat: constants.DateTimeMillLayout,
CallerPrettyfier: func(frame *runtime.Frame) (function string, file string) {
fileName := path.Base(frame.File)
lineNum := strconv.Itoa(frame.Line)
return "", fileName + ":" + lineNum
},
})
// 使用 lumberjack 实现 logrus 的滚动日志
logger := &lumberjack.Logger{
Filename: logConf.Path,
MaxSize: 300, // 日志文件大小,单位是 MB
MaxBackups: 30, // 最大过期日志保留个数
MaxAge: 30, // 保留过期文件最大时间,单位 天
Compress: false, // 是否压缩日志,默认是不压缩,这里设置为true,压缩日志
}
Logger.SetOutput(logger)
}
func GetLogger() *logrus.Logger {
return Logger
}
func GetLevel(levelStr string) logrus.Level {
switch levelStr {
case "trace":
return logrus.TraceLevel
case "debug":
return logrus.DebugLevel
case "info":
return logrus.InfoLevel
case "warn":
return logrus.WarnLevel
case "error":
return logrus.ErrorLevel
case "fatal":
return logrus.FatalLevel
case "panic":
return logrus.PanicLevel
default:
return logrus.InfoLevel
}
}
问题点:若要对logrus进行包装,会存在输出的文件和行号错误,解决方案:
func Infof(msg string, args ...interface{}) {
entry := logrus.NewEntry(Logger) // work!
entry.Data["file:line"] = fileInfo(2)
entry.Infof(msg, args...)
}
func fileInfo(skip int) string {
_, file, line, ok := runtime.Caller(skip)
if !ok {
file = "<???>"
line = 1
} else {
slash := strings.LastIndex(file, "/")
if slash >= 0 {
file = file[slash+1:]
}
}
return fmt.Sprintf("%s:%d", file, line)
}
// 推荐使用
logrus.WithFields(logrus.Fields{
"name": "张三",
"age": 20,
}).Info("my msg")
// 支持
logrus.Infof("to %s, do %s", "xxx", "yyyy")
原文地址:https://blog.csdn.net/fang0604631023/article/details/134719107
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_34592.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。