共计 1708 个字符,预计需要花费 5 分钟才能阅读完成。
导读 | Golang 的 log 包短小精悍, 可以非常轻松的实现日志打印转存功能, 下面这篇文章主要给大家介绍了关于 Go 语言常用的打 log 方式的相关资料, 文中通过实例代码介绍的非常详细, 需要的朋友可以参考下 |
文章介绍了 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")
}
正文完
星哥说事-微信公众号
![post-qrcode](https://www.xgss.net/wp-content/uploads/2023/07/二维码-微信公众号256x256.jpg)