概述
使用 log 包好处是:
- 输出会自动增加时间
- Log 是标准错误输出,fmt 是标准输出
- 做了同步处理,多个 goroutine 之间会按顺序进行打印
- 方便对日志信息进行转存,形成日志文件
所以实际项目开发过程中,应该使用 log 包,避免使用 fmt 包
总共就是 3 大类
Print 系列
输出后,程序会继续执行
log.Println("1234") // 输出并且换行
log.Print("1234") // 默认情况下,也会换行
log.Printf("1234,%d", 5678) // 格式化输出
Fatal 系列
输出后,会调用 os.Exit(1)
退出程序
log.Fatalln("1234") // 输出并且退出
log.Fatal("1234") // 不换行
log.Fatalf("1234,%d", 5678) // 格式化输出
Panic 系列
输出后,抛出异常内容,没有捕获的话,程序也会退出,并且输出错误的详细的信息
log.Panicln("1234") // 抛出异常,并且换行
log.Panic("1234") // 不换行
log.Panicf("1234,%d", 5678) // 格式化输出
配置
配置输出前缀,这样打印的日志都会有这个前缀
func init() {
log.SetPrefix("[INFO] ") // 惯例都是大写字母
}
func main() {
log.Println("1234") // SYSTEM:2023/01/02 14:20:43 1234
}
配置输出到文件,只需实现 io.writer
接口的都可以
func init() {
f, err := os.OpenFile("./system.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
if err != nil {
log.Fatalln(err)
}
log.SetOutput(f)
}
func main() {
log.Println("1234")
}
配置格式,可以配置输出更多的信息,比如打印日子的位置,微妙数
func init() {
// 输出日期,时间,微妙,文件的位置
log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Llongfile)
}
func main() {
log.Println("1234") // 2023/01/02 14:29:46.872928 /myProject/go/silver/gotest/main.go:12: 1234
}