log是 Go 標準庫提供的,不需要另外安裝。可直接使用。它提供了3組函數:
Print
/Printf
/Println
:正常輸出日誌;Panic
/Panicf
/Panicln
:輸出日誌後,以拼裝好的字符串為參數調用panic
;Fatal
/Fatalf
/Fatalln
:輸出日誌後,調用os.Exit(1)
退出程序。
import "log"
func main() {
Name := "howard"
Age := 11
log.Printf("%s login, age:%d", Name, Age)
log.Panicf("Oh, system error when %s login", Name)
log.Fatalf("Danger! hacker %s login", Name)
}
可在每條輸出的文本前增加一些額外信息,如日期時間、文件名等。
// src/log/lgo.go
const (
Ldate = 1 << iota // the date in the local time zone: 2009/01/23
Ltime // the time in the local time zone: 01:23:23
Lmicroseconds // microsecond resolution: 01:23:23.123123. assumes Ltime.
Llongfile // full file name and line number: /a/b/c/d.go:23
Lshortfile // final file name element and line number: d.go:23. overrides Llongfile
LUTC // if Ldate or Ltime is set, use UTC rather than the local time zone
Lmsgprefix // move the "prefix" from the beginning of the line to before the message
LstdFlags = Ldate | Ltime // initial values for the standard logger
)
Ldate
:輸出當地時區的日期,如2021/02/07Ltime
:輸出當地時區的時間,如12:45:45Lmicroseconds
:輸出的時間精確到微秒,設置了該選項就不用設置Ltime了。如12:45:45.123123Llongfile
:輸出長文件名+行號,含包名Lshortfile
:輸出短文件名+行號,不含包名,如main.go:20LUTC
:如果設置了Ldate或Ltime,將輸出 UTC 時間,而非當地時區
func main() {
Name := "howard"
Age := 11
log.SetFlags(log.Lshortfile | log.Ldate | log.Lmicroseconds)
log.Printf("%s login, age:%d", Name, Age)
// 輸出: 2023/09/11 16:29:26.833582 log1.go:11: howard login, age:11
}
標準庫log
並沒有日誌等級的設定。 如果有用到日誌等級,可以參考 zap
。以及日誌切割 包lumberjack
。