Go每日一库之9:log
简介
在日常开发中,日志是必不可少的功能。虽然有时可以用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