logrus
logrus是目前github上star最多的一个go语言日志库,完全兼容go标准库日志模块,可以方便的替换整个项目,这里记录下logrus的简单使用方法。
简单用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package main
import ( log "github.com/sirupsen/logrus" )
func main() { log.SetFormatter(&log.JSONFormatter{})
log.SetOutput(os.Stdout)
log.WithFields(log.Fields{ "userID": 1, "api":"login" "req":"xxxxxx", }).Info("a login request") }
|
logrus
提倡结构话日志记录,使用WithFields
可以方便的结构化日志数据。
lfshook
lfshook是一个方便开发人员使用logrus写入文件系统的一个hook,能够快速的配置logrus。
一般用法
比较简单,直接上代码,一目了然:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| var Log *logrus.Logger func NewLogger() *logrus.Logger { if Log != nil { return Log }
pathMap := lfshook.PathMap{ logrus.InfoLevel: "./info.log", logrus.PanicLevel: "./panic.log", }
Log = logrus.New()
Log.Hooks.Add(lfshook.NewHook(pathMap, &logrus.JSONFormatter{}))
return Log }
|
- 这种方法将日志写入指定文件,但是通常为了避免日志文件过大,方便查看,我们需要将日志文件进行分割,下面使用
file-rotatelogs
来实现。
file-rotatelogs
file-rotatelogs提供一个文件轮换io.Writer
,配合logrus
实现日志分割。
使用方法
还是直接上代码了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| var Log *logrus.Logger func NewLoggerWithRotate() *logrus.Logger { if Log != nil { return Log }
path := "./test.log" writer, _ := rotatelogs.New( path+".%Y%m%d%H%M", rotatelogs.WithLinkName(path), rotatelogs.WithMaxAge(60*time.Second), rotatelogs.WithRotationTime(20*time.Second), )
pathMap := lfshook.WriterMap{ logrus.InfoLevel: writer, logrus.PanicLevel: writer, }
Log = logrus.New() Log.Hooks.Add(lfshook.NewHook( pathMap, &logrus.JSONFormatter{}, ))
return Log }
|