目錄
六、字段
七、預設字段
八、日誌條目
九、hooks
十、格式化
十一、記錄函式名
go 從入門到放棄完整教程目錄(更有python、go、pytorch、tensorflow、爬蟲、人工智慧教學等著你):
更新、更全的《go從入門到放棄》的更新**,更有python、go、人工智慧教學等著你:
日誌是程式中必不可少的乙個環節,由於go語言內建的日誌庫功能比較簡潔,我們在實際開發中通常會選擇使用第三方的日誌庫來進行開發。本文介紹了logrus
這個日誌庫的基本使用。
logrus是go(golang)的結構化logger,與標準庫logger完全api相容。
它有以下特點:
go get github.com/sirupsen/logrus
使用logrus最簡單的方法是簡單的包級匯出日誌程式:
)func main() ).info("一條舔狗出現了。")
}對於更高階的用法,例如在同一應用程式記錄到多個位置,你還可以建立logrus logger的例項:
)// 建立乙個新的logger例項。可以建立任意多個。
var log = logrus.new()
func main() else
log.withfields(logrus.fields).info("一群舔狗出現了。")
}logrus有七個日誌級別:trace
,debug
,info
,warning
,error
,fatal
andpanic
。
log.trace("something very low level.")
log.debug("useful debugging information.")
log.warn("you should probably take a look at this.")
log.error("something failed but i'm not quitting.")
// 記完日誌後會呼叫os.exit(1)
log.fatal("bye.")
// 記完日誌後會呼叫 panic()
log.panic("i'm bailing.")
你可以在logger上設定日誌記錄級別,然後它只會記錄具有該級別或以上級別任何內容的條目:
// 會記錄info及以上級別 (warn, error, fatal, panic)
log.setlevel(log.infolevel)
如果你的程式支援debug或環境變數模式,設定log.level = logrus.debuglevel
會很有幫助。
logrus鼓勵通過日誌字段進行謹慎的結構化日誌記錄,而不是冗長的、不可解析的錯誤訊息。
例如,區別於使用log.fatalf("failed to send event %s to topic %s with key %d")
,你應該使用如下方式記錄更容易發現的內容:
log.withfields(log.fields).fatal("failed to send event")
withfields
的呼叫是可選的。
通常,將一些字段始終附加到應用程式的全部或部分的日誌語句中會很有幫助。例如,你可能希望始終在請求的上下文中記錄request_id
和user_ip
。
區別於在每一行日誌中寫上log.withfields(log.fields)
,你可以向下面的示例**一樣建立乙個logrus.entry
去傳遞這些字段。
requestlogger := log.withfields(log.fields)
除了使用withfield
或withfields
新增的字段外,一些欄位會自動新增到所有日誌記錄事中:
你可以新增日誌級別的鉤子(hook)。例如,向異常跟蹤服務傳送error
、fatal
和panic
、資訊到statsd或同時將日誌傳送到多個位置,例如syslog。
logrus配有內建鉤子。在init
中新增這些內建鉤子或你自定義的鉤子:
}意:syslog鉤子還支援連線到本地syslog(例如. 「/dev/log」 or 「/var/run/syslog」 or 「/var/run/log」)。有關詳細資訊,請檢視syslog hook readme。
logrus內建以下兩種日誌格式化程式:
logrus.textformatter
logrus.jsonformatter
還支援一些第三方的格式化程式,詳見專案首頁。
如果你希望將呼叫的函式名新增為字段,請通過以下方式設定:
log.setreportcaller(true)
這會將呼叫者新增為」method」,如下所示:
```
注意:,開啟這個模式會增加效能開銷。
# 執行緒安全
此時的併發操作就是安全的,可以用logger.setnolock()來關閉它。
# gin框架使用logrus
```go
// a gin with logrus demo
var log = logrus.new()
func init()
// output to stdout instead of the default stderr
// can be any io.writer, see below for file example
f, _ := os.create("./gin.log")
log.out = f
gin.setmode(gin.releasemode)
gin.defaultwriter = log.out
// only log the warning severity or above.
log.level = logrus.infolevel
}func main() ).warn("a group of walrus emerges from the ocean")
// c.json:返回json格式的資料
c.json(200, gin.h)
}) // 啟動http服務,預設在0.0.0.0:8080啟動服務
r.run()
}```
Go第三方日誌庫logrus
日誌是程式中必不可少的乙個環節,由於go語言內建的日誌庫功能比較簡潔,我們在實際開發中通常會選擇使用第三方的日誌庫來進行開發。本文介紹了logrus這個日誌庫的基本使用。logrus是go golang 的結構化logger,與標準庫logger完全api相容。它有以下特點 使用logrus最簡單的...
第三方日誌庫logrus使用
日誌是程式中必不可少的乙個環節,由於go語言內建的日誌庫功能比較簡潔,我們在實際開發中通常會選擇使用第三方的日誌庫來進行開發。本文介紹了logrus這個日誌庫的基本使用。logrus是go golang 的結構化logger,與標準庫logger完全api相容。它有以下特點 go get githu...
go匯入第三方包
最好的學習方式就是實踐。我們通過匯入gin包來深入學習。首先回想一下,我們安裝goland的時候,設定了幾個比較重要的環境變數,也就是goroot和gopath。goroot比較容易理解。也就是我們go語言的安裝目錄,標準庫什麼的就放在裡面的。在linux中的話,預設安裝到 usr lib go中,...