完全兼容golang标准库日志模块:logrus拥有六种日志级别:debug、info、warn、error、fatal和panic,这是golang标准库日志模块的API的超集。如果您的项目使用标准库日志模块,完全可以以最低的代价迁移到logrus上logrus内置了两种日志格式,JSONFormatter和TextFormatter,如果这两个格式不满足需求,可以自己动手实现接口Formatter,来定义自己的日志格式。
logrus鼓励通过Field机制进行精细化的、结构化的日志记录,而不是通过冗长的消息来记录日志。logrus是一个可插拔的、结构化的日志框架。
Fatal和Panic和Print的区别在于,Fatal会保存日志并终止程序,Panic会保存日志并丢出异常终止程序,Print会保存日志但是程序继续
日志输出到终端:
func init() {
// Log as JSON instead of the default ASCII formatter.
log.SetFormatter(&log.JSONFormatter{}) //这是日志格式为json格式
// Output to stdout instead of the default stderr
// Can be any io.Writer, see below for File example
log.SetOutput(os.Stdout) //将之日消息输出到标准输出
// Only log the warning severity or above.
if t := os.Getenv("VPP_MQTT_DEBUG"); t != "" {
//从环境中取字符串,获取环境变量的值 export VPP_MQTT_DEBUG=xxx
log.SetLevel(log.DebugLevel)//设置日志级别为调试以上
} else {
log.SetLevel(log.WarnLevel) //设置日志级别为警告以上
}
}
日志输出到文件:
package main
import (
)
const (
dirPath = "/var/log/xxx"
logPath = "/var/log/xxx/xxx.log"
)
func FileExists(path string) bool {
_, err := os.Stat(path)
return err == nil || os.IsExist(err)
}
func CreateDir(dir string) (bool, error) {
_, err := os.Stat(dir)
if err == nil {
return true, nil
}
err2 := os.MkdirAll(dir, 0755)
if err2 != nil {
return false, err2
}
return true, nil
}
func init() {
// Log as JSON instead of the default ASCII formatter.
log.SetFormatter(&log.JSONFormatter{})
log.SetLevel(log.DebugLevel)
res2, err := CreateDir(dirPath)
if res2 == false {
panic(err)
}
file, _ := os.OpenFile(logPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
log.SetOutput(file)
// Only log the warning severity or above.
//if t := os.Getenv("ADMIN_MQTT_DEBUG"); t != "" {
// log.SetLevel(log.DebugLevel)
//} else {
// log.SetLevel(log.WarnLevel)
//}
}
根据需要自行更改 ·