go語言之日誌

完全兼容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)
	//}
}

根據需要自行更改 ·

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