文章介绍了3种常用的打log的方式,并赋上了注解
先写上注意事项,三种方法建议分开测,因为可能在第一种的Fatal会终止运行,Fatal和Panic和Print的区别在于,Fatal会保存日志并终止程序,Panic会保存日志并丢出异常终止程序,Print会保存日志但是程序继续
main.go
package main
import (
"log"
"bytes"
"fmt"
"os"
"github.com/astaxie/beego/logs"
)
func main() {
//1.日志写入一段缓存里
var buf bytes.Buffer
logger := log.New(&buf, "logger: ", log.Llongfile)//三个参数对应输出对象,前缀,文件名然后整合成前缀
logger.Print("Hello, log file!") //实际log信息
fmt.Println(&buf)
//2.日志写入一段文件里,执行完刷新工程,会有文件debug.log打开来看
fileName := "debug.log" //在工程路径下和src同级,也可以写绝对路径,不过要注意转义符
logFile,err := os.Create(fileName) //创建该文件,返回句柄
defer logFile.Close() //确保文件在该函数执行完以后关闭
if err != nil {
log.Fatalln("open file error !")
}
//库里的log包不存在级别,只有Print,Fatal,Panic三种,想要7种级别,可以用syslog包或者框架
debugLog := log.New(logFile,"",log.Llongfile)
debugLog.Print("找到一个低级bug,低级别的日志报告,执行debug记录后继续执行")
debugLog.Fatal("发现一个严重bug,日志已记录,程序在此终止")
debugLog.Panic("哎呀,我没有被执行,好惨")
//3.使用beego框架的log包进行log处理 ,对应7种级别
logInstance:=logs.GetLogger()
logInstance.Println("this is a message of http")
//an official log.Logger with prefix ORM
logs.GetLogger("ORM").Println("this is a message of orm")
logs.Debug("my book is bought in the year of ", 2016)
logs.Info("this %s cat is %v years old", "yellow", 3)
logs.Warn("json is a type of kv like", map[string]int{"key": 2016})
logs.Error(1024, "is a very", "good game")
logs.Critical("oh,crash")
logs.Notice("fuck")
logs.Alert("alert")
logs.Emergency("emergency")
}
第二种
main.go
package main
import (
"os"
"log"
)
func main() {
file, err := os.OpenFile("./testLog/test.log", os.O_CREATE | os.O_WRONLY | os.O_APPEND,os.ModePerm)
if err != nil {
log.Fatalln(err)
}
logger := log.New(file, "", log.LstdFlags|log.Llongfile)
logger.Println("日志1.")
logger.Println("日志23")
}
总结
到此这篇关于Go语言常用的打log方式的文章就介绍到这了,更多相关Go语言log详解内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!