亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang如何配置和創建Logger

發布時間:2020-06-01 22:47:06 來源:億速云 閱讀:2907 作者:鴿子 欄目:編程語言

1.log

1.1使用Logger

log包定義了Logger類型,該類型提供了一些格式化輸出的方法。
本包也提供了一個預定義的"標準"logger,可以通過調用Print系列(Print|Printf|Println)、Fatal系列(Fatal|Fatalf|fatalln)和Panic系列(Panic|Panicf|PanicLn)來使用,比自行創建一個logger對象更容易使用。
例如:我們可以像下面的代碼一樣,直接通過log包來調用上岸提到的方法,默認它們會把日志信息大隱刀終端界面。
package main

import (
    "log"
)

func main() {
    log.Println("這是一條很普通的日志。")
    v := "很普通的"
    log.Printf("這是一條%s日志。\n", v)
    log.Fatalln("這是一條會觸發fatal的日志。")
    log.Panicln("這是一條會觸發panic的日志。")
}

結果:
2020/02/06 21:57:13 這是一條很普通的日志。
2020/02/06 21:57:13 這是一條很普通的日志。
2020/02/06 21:57:13 這是一條會觸發fatal的日志。

Process finished with exit code 1
logger會打印每條日志信息的日期、時間,默認輸出到系統的標準錯誤。
Fatal系列函數會寫入日志信息后調用os.Exit(1)。
Panic系列函數會在寫入日志信息后panic。

1.2配置logger

1.2.1標準logger的配置

默認情況下的logger只會提供日志的時間信息,但是很多情況下,我們希望得到更多信息,比如記錄該日志的文件名和行號等。
log標準庫中為我們提供了定制這些設置的方法。
log標準庫中的Flags函數會返回標準logger的輸出配置,而SetFlags函數是用來設置標準logger的輸出配置。
func Flags() int
func SetFlags(flag int)
flag選項
log標準庫提供了如下的flag選項,它們是一系列定義好的常量。
const (
    // 控制輸出日志信息的細節,不能控制輸出的順序和格式。
    // 輸出的日志在每一項后會有一個冒號分隔:例如2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
    Ldate         = 1 << iota     // 日期:2009/01/23
    Ltime                         // 時間:01:23:23
    Lmicroseconds                 // 微秒級別的時間:01:23:23.123123(用于增強Ltime位)
    Llongfile                     // 文件全路徑名+行號: /a/b/c/d.go:23
    Lshortfile                    // 文件名+行號:d.go:23(會覆蓋掉Llongfile)
    LUTC                          // 使用UTC時間
    LstdFlags     = Ldate | Ltime // 標準logger的初始值
)
package main

import (
    "log"
)

func main() {
    //設置logger
    log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
    log.Println("這是一條很普通的日志。")
}

結果:
2020/02/06 22:20:40.508109 /Users/tongchao/Desktop/gopath/src/test/test.go:10: 這是一條很普通的日志。

Process finished with exit code 0

1.2.2配置日志前綴

log標準庫中還提供了關于日志信息前綴的兩個方法:
func Prefix() string  //查看標準logger的輸出前綴
func SetPrefix(prefix string)  //設置輸出前綴
package main

import (
    "log"
)

func main() {
    //設置logger
    log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
    log.Println("這是一條很普通的日志。")
    log.SetPrefix("[前綴信息]")
    log.Println("這是一條很普通的日志。")
}

結果:
2020/02/06 22:25:27.654416 /Users/tongchao/Desktop/gopath/src/test/test.go:10: 這是一條很普通的日志。
[前綴信息]2020/02/06 22:25:27.654601 /Users/tongchao/Desktop/gopath/src/test/test.go:12: 這是一條很普通的日志。

Process finished with exit code 0

這樣可以在日志信息中添加指定的前綴,方便之后對日志信息進行檢索和處理。

1.2.3配置日志輸出位置

func SetOutput(w io.Writer)

setOutput函數用來設置標準logger的輸出目的地,默認是標準錯誤輸出。
把日志輸出到同目錄下的xx.log文件中。

package main

import (
    "fmt"
    "log"
    "os"
)

func main() {
    logFile, err := os.OpenFile("./xx.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    if err != nil {
        fmt.Println("open log file failed, err:", err)
        return
    }
    log.SetOutput(logFile)
    log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
    log.Println("這是一條很普通的日志。")
    log.SetPrefix("[前綴信息]")
    log.Println("這是一條很普通的日志。")
}

結果:
xx.log中內容為
2020/02/06 22:30:22.369892 /Users/tongchao/Desktop/gopath/src/test/test.go:17: 這是一條很普通的日志。
[前綴信息]2020/02/06 22:30:22.370229 /Users/tongchao/Desktop/gopath/src/test/test.go:19: 這是一條很普通的日志。
如果要使用標準的logger,會把上面的配置操作寫到init函數中
func init() {
    logFile, err := os.OpenFile("./xx.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    if err != nil {
        fmt.Println("open log file failed, err:", err)
        return
    }
    log.SetOutput(logFile)
    log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
}

1.3創建logger

log標準庫中還提供了創建新logger對象的構造函數New,支持我們自己創建logger示例。
New函數的簽名如下:
func New(out io.Writer, prefix string, flag int) *Logger
New創建一個Logger對象。其中,參數out設置日志信息寫入的目的地。參數prefix會添加到生成的每一條日志前面。參數flag定義日志的屬性(時間、文件等等)。
package main

import (
    "log"
    "os"
)

func main() {
    logger := log.New(os.Stdout, "<New>", log.Lshortfile|log.Ldate|log.Ltime)
    logger.Println("這是自定義的logger記錄的日志。")
}

結果:
<New>2020/02/06 22:34:17 test.go:10: 這是自定義的logger記錄的日志。

Process finished with exit code 0
Go內置的log庫功能有限,不能滿足不同級別日志的情況,我們在實際的項目中根據自己的需要選擇第三方日志庫,如logrus--https://github.com/sirupsen/logrus,zap--https://github.com/uber-go/zap等

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彭阳县| 阿荣旗| 霍城县| 遂昌县| 陆良县| 郧西县| 阜新| 太康县| 东乌| 铜陵市| 紫金县| 永嘉县| 凤冈县| 新竹市| 北票市| 江山市| 屯昌县| 介休市| 法库县| 盖州市| 土默特右旗| 香河县| 奈曼旗| 平潭县| 全椒县| 海淀区| 衡水市| 会东县| 成都市| 磐安县| 浪卡子县| 武山县| 石渠县| 德兴市| 江源县| 台湾省| 桐柏县| 龙泉市| 竹北市| 松江区| 富民县|