golang日志框架--logrus學習筆記
golang標准庫的日志框架非常簡單,僅僅提供了print,panic和fatal三個函數,對於更精細的日志級別、日志文件分割以及日志分發等方面並沒有提供支持。所以催生了很多第三方的日志庫,而logrus就是其中的一款第三方日志庫,它的功能強大,性能高效,而且具有高度靈活性,提供了自定義插件的功能。
1.logrus的特性
-
完全兼容golang標准庫日志模塊:logrus擁有六種日志級別:debug、info、warn、error、fatal和panic,這是golang標准庫日志模塊的API的超集。如果項目使用標准庫日志模塊,完全可以以最低的代價遷移到logrus上。
-
可擴展的Hook機制:允許使用者通過hook的方式將日志分發到任意地方,如本地文件系統、標准輸出、logstash、elasticsearch或者mq等,或者通過hook定義日志內容和格式等。
-
可選的日志輸出格式:logrus內置了兩種日志格式,
JSONFormatter
和TextFormatter
,如果這兩個格式不滿足需求,可以自己動手實現接口Formatter
,來定義自己的日志格式。 -
Field機制:logrus鼓勵通過Field機制進行精細化的、結構化的日志記錄,而不是通過冗長的消息來記錄日志。
-
logrus是一個可插拔的、結構化的日志框架。
2.logrus的使用
package main
import (
log "github.com/sirupsen/logrus" //這個日志依賴庫,需要使用
//govendor fetch github.com/sirupsen/logrus 下載到vendor目錄。
)
func main() {
log.WithFields(log.Fields{
"info": "這是golang日志框架--logrus",
}).Info("描述信息為golang日志框架logrus的學習")
}
控制台打印輸出為:
logrus與golang標准庫日志模塊完全兼容,因此可以使用log "github.com/sirupsen/logrus"
替換所有日志導入。 logrus還可以通過簡單的配置,來定義輸出、格式或者日志級別等。
3.設置日志輸出格式,日志級別等信息
import (
log "github.com/sirupsen/logrus"
"os"
)
func initLog() {
log.SetFormatter(&log.JSONFormatter{})//設置日志的輸出格式為json格式,還可以設置為text格式
log.SetOutput(os.Stdout)//設置日志的輸出為標准輸出
log.SetLevel(log.InfoLevel)//設置日志的顯示級別,這一級別以及更高級別的日志信息將會輸出
}
func main() {
//以package級別方式使用日志
initLog()
log.WithFields(log.Fields{
"info": "這是golang日志框架--logrus",
}).Info("描述信息為golang日志框架logrus的學習")
log.WithFields(log.Fields{
"omg": true,
"number": 122,
"country": "china",
}).Warn("hello this is warn level") //警告級別
log.WithFields(log.Fields{
"hello": "jason",
}).Fatal("the ice breaks!")//最高級別,致命信息
}
4.使用日志實例的方式使用日志
package main
import (
"github.com/sirupsen/logrus"
"os"
)
var log=logrus.New()
func main() {
//用日志實例的方式使用日志
log.Out=os.Stdout //日志標准輸出
file,err:=os.OpenFile("golang.log",os.O_CREATE|os.O_WRONLY,1)
if err==nil {
log.Out=file
}else {
log.Info("failed to log to file")
}
log.WithFields(logrus.Fields{
"filename":"123.txt",
}).Info("將日志信息輸出到文件中")
}
以上就是logrus日志框架的簡單了解和使用