1 |
go get github.com/sirupsen/logrus |
1、当做标准库使用
logrus实现了标准库log的方法,可以用标准库的方法用于logrus,例如
1 2 3 4 |
import ( log "github.com/sirupsen/logrus" ) log.Println("标准log") |
2、使用带级别日志
1 2 3 4 5 6 7 |
import ( log "github.com/sirupsen/logrus" )
func main() { log.Info("info") } |
具体有七个类别Trace、Debug、Info、Warning、Error、Fatal和Panic。这里需要注意Fatal和Panic类型的日志会中断程序的运行。
3、输出日志时可以附带参数
1 2 3 4 |
log.WithFields(log.Fields{ "flag": true, "name": "zhangsan", }).Fatal("fatal") |
在运行中出现错误时,把当时的参数记录下来更容易分析,而不是把各个参数组织成句子拼接起来。
4、日志输出的格式
1 2 3 4 5 6 7 |
log.SetFormatter(&log.JSONFormatter{}) log.SetFormatter(&log.TextFormatter{ ForceColors: true, FullTimestamp: true, }) log.SetOutput(os.Stdout) log.SetLevel(log.WarnLevel) |
可以输出JSON,文本格式,对具体的格式还可以设置颜色、时间串等信息,可以设置输出位置,输出日志的级别。
5、输出到多个位置
如果同一份日志内容想存储到不同位置,可以创建不同的log实例,对每个实例进行不同设置
var log = logrus.New()
6、输出日志到文件
1 2 3 4 5 6 |
file, err := os.OpenFile("logs/cus.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err == nil { log.Out = file } else { log.Info("Failed to log to file, using default stderr") } |
7、分割日志文件
如果每天的日志都放到一个文件中,会越来越大,按照时间进行分割会比较好。下面的内容放到初始化的时候执行。
这里面需要引入第三方库
"github.com/lestrrat-go/file-rotatelogs"
"github.com/rifflock/lfshook"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
writer, err := rotatelogs.New( "文件名"+".%Y%m%d%H%M", // 分割后的文件名称 rotatelogs.WithLinkName("文件名"), // 生成软链,指向最新日志文件 rotatelogs.WithMaxAge(time.Hour*24*365), // 设置最大保存时间 rotatelogs.WithRotationTime(time.Hour*24), // 设置日志切割时间间隔 )
if err != nil { log.Errorf("config local file system logger error", err) }
lfHook := lfshook.NewHook(lfshook.WriterMap{ logrus.DebugLevel: writer, // 为不同级别设置不同的输出目的 logrus.InfoLevel: writer, logrus.WarnLevel: writer, logrus.ErrorLevel: writer, logrus.FatalLevel: writer, logrus.PanicLevel: writer, }, &logrus.TextFormatter{DisableColors: true}) //最后加入hook log.AddHook(lfHook) |