[golang]使用logrus自定义日志模块
简介
logrus是一个第三方日志库,性能虽不如zap和zerolog,但方便易用灵活。logrus完全兼容标准的log库,还支持文本、JSON两种日志输出格式。
特点
- 相较于标准库,logrus有更细致的日志级别,从高到低分别是:trace > debug > info > warn > error > fatal > panic
- 支持自定义日志格式,内置支持JSON格式。
- 支持可扩展的 Hooks 机制,可以为不同级别的日志添加 Hooks 将日志记录到不同位置。
- 并发安全。
安装
go get github.com/sirupsen/logrus
快速入门
package main
import (
	"github.com/sirupsen/logrus"
)
func main() {
	logrus.SetLevel(logrus.TraceLevel)  // 默认为info日志级别
	logrus.Trace("trace log")
	logrus.Debug("debug log")
	logrus.Info("Info log")
	logrus.Warn("warn log")
	logrus.Error("error log")
	logrus.Panic("panic log") // panic会输出报错然后终止程序
	logrus.Fatal("fatal log")   // fatal会直接终止程序
}
自定义log模块
需求:自定义日志模块,实现日志文件自动分割,同时向控制台和文件输出日志。
示例代码:
- tmpgo/pkg/log/log.go
package log
import (
	"os"
	"path/filepath"
	"github.com/orandin/lumberjackrus"
	"github.com/sirupsen/logrus"
)
var logger *logrus.Logger
var logDirPath string = "logs"
var logFilePath string
func init() {
	// logs目录是否存在, 不存在则创建
	if _,err := os.Stat(logDirPath); os.IsNotExist(err) {
		os.MkdirAll(logDirPath, os.ModePerm)
	}
	logFilePath = filepath.Join(logDirPath, "app.log")
	logger = logrus.New()
	logger.SetOutput(os.Stdout)    // 在标准输出中显示日志内容
	logger.SetLevel(logrus.InfoLevel)    // 标准输出中的日志级别
	logger.SetFormatter(&logrus.JSONFormatter{    // 标准输出以json形式显示日志
		TimestampFormat: "2006-01-02 15:04:05.000",
	})
	logger.AddHook(rotateHook())    // 通过添加hook的方式实现日志输出到文件中并自动切割
}
// 日志文件自动切割
func rotateHook() logrus.Hook {
	hook, err := lumberjackrus.NewHook(&lumberjackrus.LogFile{
		Filename:   logFilePath,
		MaxAge:     1,
		MaxSize:    100,
		MaxBackups: 30,
		Compress:   true,
		LocalTime:  false,
	},
		logrus.InfoLevel,
		&logrus.JSONFormatter{TimestampFormat: "2006-01-02 15:04:05.000"},
		&lumberjackrus.LogFileOpts{})
	if err != nil {
		logrus.Fatal(err)
	}
	return hook
}
func Info(v ...interface{}) {
	logger.Info(v)
}
func Infof(format string, v ...interface{}) {
	logger.Infof(format, v...)
}
func Warn(v ...interface{}) {
	logger.Warn(v)
}
func Warnf(format string, v ...interface{}) {
	logger.Warnf(format, v...)
}
func Debug(v ...interface{}) {
	logger.Debug(v)
}
func Debugf(format string, v ...interface{}) {
	logger.Debugf(format, v...)
}
func Error(v ...interface{}) {
	logger.Error(v)
}
func Errorf(format string, v ...interface{}) {
	logger.Errorf(format, v...)
}
func Panic(v ...interface{}) {
	logger.Panic(v)
}
func Panicf(format string, v ...interface{}) {
	logger.Panicf(format, v...)
}
func Fatal(v ...interface{}) {
	logger.Fatal(v)
}
func Fatalf(format string, v ...interface{}) {
	logger.Fatalf(format, v...)
}
- main.go中使用
package main
import (
	"tmpgo/pkg/log"
)
func main() {
	log.Debug("debug log")
	log.Info("Info log")
	log.Warn("warn log")
	log.Error("error log")
}
参考
本文来自博客园,作者:花酒锄作田,转载请注明原文链接:https://www.cnblogs.com/XY-Heruo/p/customizeLogModulByLogrus.html
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号