1、安装

go get github.com/sirupsen/logrus

实现日志滚动

go get gopkg.in/natefinch/lumberjack.v2

2、初始化logrus参数


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进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注