GoFrame日誌打印
一、日誌介紹
glog
是通用的高性能日誌管理模塊,實現了強大易用的日誌管理功能,是gf
開發框架的核心模塊之一。
重要的幾點說明:
glog
採用了無鎖設計,性能高效;glog
支持文件輸出、日誌級別、日誌分類、調試管理、調用跟蹤、鏈式操作等等豐富特性;- 可以使用
glog.New
方法創建glog.Logger
對象用於自定義日誌打印,也可以並推薦使用glog
默認提供的包方法來打印日誌; - 當使用包方法修改模塊配置時,注意任何的
glog.Set*
設置方法都將會全局生效; - 日誌內容默認時間格式爲
時間 [級別] 內容 換行
,其中時間
精確到毫秒級別,級別
爲可選輸出,內容
爲調用端的參數輸入,換行
爲可選輸出(部分方法自動爲日誌內容添加換行符號),日誌內容示例:2018-10-10 12:00:01.568 [ERRO] 產生錯誤
; Print*/Debug*/Info*
方法輸出日誌內容到標準輸出(stdout
),爲防止日誌的錯亂,Notice*/Warning*/Error*/Critical*/Panic*/Fatal*
方法也是將日誌內容輸出到標準輸出(stdout
);- 其中
Panic*
方法在輸出日誌信息後會引發panic
錯誤方法,Fatal*
方法在輸出日誌信息之後會停止進程運行,並返回進程狀態碼值爲1
(正常程序退出狀態碼爲0
);
二、單例對象
從GF v1.10
版本開始,日誌組件支持單例模式,使用g.Log(單例名稱)
獲取不同的單例日誌管理對象。提供單例對象的目的在於針對不同業務場景可以使用不同配置的日誌管理對象。
三、日誌級別
日誌級別用於管理日誌的輸出,我們可以通過設定特定的日誌級別來關閉/開啓特定的日誌內容。通過SetLevel
方法可以設置日誌級別,glog
支持以下幾種日誌級別常量設定:
LEVEL_ALL
LEVEL_DEBU
LEVEL_INFO
LEVEL_NOTI
LEVEL_WARN
LEVEL_ERRO
LEVEL_CRIT
我們可以通過位操作
組合使用這幾種級別,例如其中LEVEL_ALL
等價於LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT
。例如我們可以通過LEVEL_ALL & ^LEVEL_DEBU & ^LEVEL_INFO & ^LEVEL_NOTI
來過濾掉LEVEL_DEBU/LEVEL_INFO/LEVEL_NOTI
日誌內容。
四、配置文件
日誌組件支持配置文件,當使用g.Log(單例名稱)
獲取Logger
單例對象時,將會自動通過默認的配置管理對象獲取對應的Logger
配置。默認情況下會讀取logger.單例名稱
配置項,當該配置項不存在時,將會讀取logger
配置項。
[logger]
# 日誌目錄
path = "logs"
# all LEVEL_ALL = LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT
# dev LEVEL_DEV = LEVEL_ALL
# pro LEVEL_PROD = LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT
level = "all"
# 是否打印到控制檯
stdout = true
[logger.logger1]
path = "logger1"
level = "dev"
stdout = true
[logger.logger2]
path = "logger2"
level = "prod"
stdout = false
五、示例
項目目錄
D:.
│ go.mod
│ go.sum
│ main.go
│
└─config
config.toml
main.go
package main
import (
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/os/glog"
)
func main() {
// 對應默認配置項 logger,默認default
g.Log().Debug("[default]Debug")
g.Log().Info("[default]info")
g.Log().Warning("[default]Warning")
g.Log().Error("[default]Error")
// 對應 logger.logger1 配置項
g.Log("logger1").Debug("[logger1]Debug")
g.Log("logger1").Info("[logger1]info")
g.Log("logger1").Warning("[logger1]Warning")
g.Log("logger1").Error("[logger1]Error")
// 對應 logger.logger2 配置項
g.Log("logger2").Debug("[logger2]Debug")
g.Log("logger2").Info("[logger2]info")
g.Log("logger2").Warning("[logger2]Warning")
g.Log("logger2").Error("[logger2]Error")
// 日誌級別設置,過濾掉Info日誌信息
l := glog.New()
l.Info("info1")
l.SetLevel(glog.LEVEL_ALL ^ glog.LEVEL_INFO)
l.Info("info2")
// 支持哪些級別
// LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT
// 異常
g.Log().Panic("this is panic!")
g.Log().Info("............")
}
config.toml
[logger]
# 日誌目錄
path = "logs"
# all LEVEL_ALL = LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT
# dev LEVEL_DEV = LEVEL_ALL
# pro LEVEL_PROD = LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT
level = "all"
# 是否打印到控制檯
stdout = true
[logger.logger1]
path = "logger1"
level = "dev"
stdout = true
[logger.logger2]
path = "logger2"
level = "prod"
stdout = false
代碼地址
項目視頻
- 騰訊課堂教程地址:GoFrame基礎教程-快速入門
- bilibili教程地址:GoFrame基礎教程-快速入門
- 公衆號搜索:GoWeb學習之路