Go 標(biāo)準(zhǔn)庫介紹六: log

本文介紹Go 標(biāo)準(zhǔn)庫 log 的常用導(dǎo)出函數(shù),結(jié)構(gòu)體及方法。
import log
log 包實現(xiàn)了簡單的日志服務(wù),log 包定義了Logger類型,該類型提供了一些格式化輸出的方法。本包也提供了一個預(yù)定義的“標(biāo)準(zhǔn)”Logger,可以通過輔助函數(shù)Print[f|ln]、Fatal[f|ln]和Panic[f|ln]訪問,比手工創(chuàng)建一個Logger對象更容易使用。Logger會打印每條日志信息的日期、時間,默認輸出到標(biāo)準(zhǔn)錯誤。Fatal系列函數(shù)會在寫入日志信息后調(diào)用os.Exit(1)。Panic系列函數(shù)會在寫入日志信息后調(diào)用panic。
1. Logger 結(jié)構(gòu)體
Logger 結(jié)構(gòu)體定義:
type Logger struct {
mu sync.Mutex // ensures atomic writes; protects the following fields
prefix string // prefix to write at beginning of each line
flag int // properties
out io.Writer // destination for output
buf []byte // for accumulating text to write
}
Logger 類型表示一個記錄日志的對象,它會生成一行行的輸出寫入一個io.Writer 接口。每一條日志操作會調(diào)用一次io.Writer 接口的Write 方法。Logger 類型的對象可以被多個線程安全的同時使用,它會保證對io.Writer 接口的順序訪問。
-
func New(out io.Writer, prefix string, flag int) *Logger// 創(chuàng)建一個Logger, out設(shè)置日志信息寫入的目的地, prefix 添加到生成的每一條日志前面, flag定義日志的屬性 -
func (l *Logger) Flags() int// Flags返回logger的輸出選項 -
func (l *Logger) SetFlags(flag int)// SetFlags設(shè)置logger的輸出選項 -
func (l *Logger) Prefix() string// Prefix返回logger的輸出前綴 -
func (l *Logger) SetPrefix(prefix string)// SSetPrefix設(shè)置logger的輸出前綴 -
func (l *Logger) Output(calldepth int, s string) error// 輸出一條日志 -
func (l *Logger) Printf(format string, v ...interface{})// 將生成的格式化字符串輸出到out -
func (l *Logger) Fatal(v ...interface{})// Fatal等價于{l.Print(v...); os.Exit(1)} -
func (l *Logger) Panic(v ...interface{})// Panic等價于{l.Print(v...); panic(...)}
2. log 導(dǎo)出函數(shù)
log 導(dǎo)出函數(shù)基于預(yù)定義的 std 變量 var std = New(os.Stderr, "", LstdFlags) 實現(xiàn)。
-
func Flags() int// 獲取預(yù)定義“標(biāo)準(zhǔn)”日志輸出屬性 -
func Prefix() string// 獲取預(yù)定義“標(biāo)準(zhǔn)”日志前綴 -
func SetOutput(w io.Writer)// 設(shè)置預(yù)定義“標(biāo)準(zhǔn)”日志輸出位置 -
func Print(v ...interface{})// 打印一條標(biāo)準(zhǔn)日志
3. 代碼示例
$GOPATH/src/github.com/ironxu/go_note/library/log/log.go 源碼如下:
// go 標(biāo)準(zhǔn)庫 log
package main
import (
"fmt"
"log"
"os"
)
func main() {
logger := log.New(os.Stdout, "a log:", log.Lshortfile)
logger.SetFlags(log.Llongfile)
fmt.Println(logger.Flags()) // 8
logger.SetPrefix("debug:")
fmt.Println(logger.Prefix()) // debug:
logger.Print("hello, log file")
err := logger.Output(2, "world")
fmt.Println(err)
logger.Printf("%v\t%v", "hello", "go")
// logger.Fatal("fatal log")
// logger.Panic("Panic log")
// 使用預(yù)定義日志類型
fmt.Println(log.Flags()) // 3
fmt.Println(log.Prefix()) // ''
log.Print("hello predefine log") // 2017/03/04 16:34:27 hello predefine log
}
參考
可以關(guān)注我的微博了解更多信息: @剛剛小碼農(nóng)