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)
	//}
}

根据需要自行更改 ·

你可能感兴趣的:(Golang)