本文主要介绍Go自带的log库
打印日志
log.Print() # 打印日志
log.Fatal() # 打印日志,并调用 os.Exit(1)
log.Panic() # 打印日志,并调用 panic()
同时提供两种便捷的方法来打印日志,设计与fmt.Print一样,分别是
log.Println() # ln尾缀,line的缩写,表示在末尾换行
log.Printf() # f尾缀,format的缩写,表示格式化打印
示例一
package main
import "log"
func main() {
log.Println("hello world")
}
输出
2023/01/06 09:00:47 hello world
打印出现日志的位置
通过log.SetFlags方法,输出所在的文件及位置
示例二
package main
import "log"
func main() {
log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Llongfile)
log.Println("hello world")
}
输出
2023/01/06 09:11:30.466220 /Users/yc/go/src/go_playground/basic_learning/example/main.go:7: hello world
设置标识头
通过log.SetPrefix方法,来设置标识头
示例三
package main
import "log"
func main() {
log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Llongfile)
log.SetPrefix("【user】")
log.Println("hello world")
}
输出
user】2023/01/06 09:16:29.429620 /Users/yc/go/src/go_playground/basic_learning/example/main.go:8: hello world
日志输出到文件
通过log.SetOutput()进行设置
示例四
package main
import (
"log"
"os"
)
func main() {
log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Llongfile)
log.SetPrefix("【user】")
logFile, err := os.OpenFile("svc.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
log.Fatal("cannot open log file")
}
log.SetOutput(logFile)
log.Println("hello world")
}
输出
同时输出日志到标准输出和文件
使用io.MultiWriter方式,聚合两个输出对象
示例五
package main
import (
"io"
"log"
"os"
)
func main() {
log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Llongfile)
log.SetPrefix("【user】")
logFile, err := os.OpenFile("svc.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
log.Fatal("cannot open log file")
}
log.SetOutput(io.MultiWriter(logFile, os.Stdout))
log.Println("hello world")
}