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

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

原文鏈接 http://ironxu.com/775

本文介紹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)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,654評論 19 139
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進行統(tǒng)計分析...
    時待吾閱讀 5,161評論 0 6
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進行統(tǒng)計分析...
    時待吾閱讀 5,232評論 1 13
  • (http://www.cnblogs.com/zhangchenliang/p/4546352.html) 1、...
    凌雲(yún)木閱讀 2,622評論 0 2
  • 三千紅塵如細絲 理理梳梳年復(fù)年 遙遙當(dāng)時貪與嗔 墮入凡俗幾經(jīng)年
    滄海一粟貝閱讀 202評論 1 9

友情鏈接更多精彩內(nèi)容