中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

阜新市| 雷州市| 南溪县| 石柱| 新余市| 桂阳县| 嵊州市| 大化| 洪江市| 长宁区| 曲沃县| 宜阳县| 大宁县| 平度市| 许昌市| 巩留县| 新巴尔虎左旗| 五莲县| 延吉市| 冕宁县| 循化| 宁国市| 石台县| 浙江省| 肇州县| 左云县| 河北区| 楚雄市| 陇西县| 桑植县| 栾川县| 讷河市| 富顺县| 禹城市| 时尚| 柞水县| 海伦市| 个旧市| 光泽县| 广南县| 新绛县|