GoFrame日誌打印

GoFrame日誌打印

一、日誌介紹

glog是通用的高性能日誌管理模塊,實現了強大易用的日誌管理功能,是gf開發框架的核心模塊之一。

重要的幾點說明:

  1. glog採用了無鎖設計,性能高效;
  2. glog支持文件輸出、日誌級別、日誌分類、調試管理、調用跟蹤、鏈式操作等等豐富特性;
  3. 可以使用glog.New方法創建glog.Logger對象用於自定義日誌打印,也可以並推薦使用glog默認提供的包方法來打印日誌;
  4. 當使用包方法修改模塊配置時,注意任何的glog.Set*設置方法都將會全局生效
  5. 日誌內容默認時間格式爲 時間 [級別] 內容 換行,其中時間精確到毫秒級別,級別爲可選輸出,內容爲調用端的參數輸入,換行爲可選輸出(部分方法自動爲日誌內容添加換行符號),日誌內容示例:2018-10-10 12:00:01.568 [ERRO] 產生錯誤
  6. Print*/Debug*/Info*方法輸出日誌內容到標準輸出(stdout),爲防止日誌的錯亂,Notice*/Warning*/Error*/Critical*/Panic*/Fatal*方法也是將日誌內容輸出到標準輸出(stdout);
  7. 其中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

代碼地址

項目視頻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章