简介
在日常开发中,日志是必不可少的功能。虽然有时可以用fmt
库输出一些信息,但是灵活性不够。Go 标准库提供了一个日志库log
。本文介绍log
库的使用。
快速使用
log
是 Go 标准库提供的,不需要另外安装。可直接使用:
package main
import (
"log"
)
type User struct {
Name string
Age int
}
func main() {
u := User{
Name: "dj",
Age: 18,
}
log.Printf("%s login, age:%d", u.Name, u.Age)
log.Panicf("Oh, system error when %s login", u.Name)
log.Fatalf("Danger! hacker %s login", u.Name)
}
log
默认输出到标准错误(stderr
),每条日志前会自动加上日期和时间。如果日志不是以换行符结尾的,那么log
会自动加上换行符。即每条日志会在新行中输出。
log
提供了三组函数:
Print/Printf/Println
:正常输出日志;Panic/Panicf/Panicln
:输出日志后,以拼装好的字符串为参数调用panic
;Fatal/Fatalf/Fatalln
:输出日志后,调用os.Exit(1)
退出程序。
命名比较容易辨别,带f
后缀的有格式化功能,带ln
后缀的会在日志后增加一个换行符。
注意,上面的程序中由于调用log.Panicf
会panic
,所以log.Fatalf
并不会调用。
定制
前缀
调用log.SetPrefix
为每条日志文本前增加一个前缀。例如,在上面的程序中设置Login:
前缀:
package main
import (
"log"
)
type User struct {
Name string
Age int
}
func main() {
u := User{
Name: "dj",
Age: 18,
}
log.SetPrefix("Login: ")
log.Printf("%s login, age:%d", u.Name, u.Age)
}
调用log.Prefix
可以获取当前设置的前缀。
选项
设置选项可在每条输出的文本前增加一些额外信息,如日期时间、文件名等。
log
库提供了 6 个选项:
// src/log/log.go
const (
Ldate = 1