完全兼容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)
//}
}
根據需要自行更改 ·