golang 集成logrus日志框架

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")

相关推荐

  1. golang 集成logrus日志框架

    2023-12-05 22:50:03       57 阅读
  2. Golang】自定义logrus日志保存为日志文件

    2023-12-05 22:50:03       51 阅读
  3. 【go语言开发】loglus日志框架的使用

    2023-12-05 22:50:03       52 阅读
  4. Loguru,一个 Python 日志神器

    2023-12-05 22:50:03       31 阅读
  5. Golang实践录:gin框架使用自定义日志模块

    2023-12-05 22:50:03       34 阅读
  6. Spring Boot项目中集成Logback作为日志框架-笔记

    2023-12-05 22:50:03       70 阅读
  7. python loguru 日志数据代码模块+飞书消息通知

    2023-12-05 22:50:03       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-05 22:50:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-05 22:50:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-05 22:50:03       82 阅读
  4. Python语言-面向对象

    2023-12-05 22:50:03       91 阅读

热门阅读

  1. tcexam 本地容器化搭建

    2023-12-05 22:50:03       66 阅读
  2. ClickHouse入门手册1.0

    2023-12-05 22:50:03       47 阅读
  3. 西南科技大学(数据结构A)期末自测练习四

    2023-12-05 22:50:03       50 阅读
  4. 樱桃键盘怎么解除fn锁定

    2023-12-05 22:50:03       127 阅读
  5. Linux配置SFTP用户的详细过程

    2023-12-05 22:50:03       49 阅读
  6. 微前端框架 qiankun

    2023-12-05 22:50:03       61 阅读
  7. Redis-Redis多级缓存架构(实践)

    2023-12-05 22:50:03       58 阅读
  8. 分析一段文字中重复词组,英文版

    2023-12-05 22:50:03       58 阅读