您好,登錄后才能下訂單哦!
Golang提供了原生日志庫“l(fā)og”,使用簡單方便,本文以代碼為例進(jìn)行說明介紹。
package main
import (
"os"
"log"
"fmt"
)
func main() {
// 打開日志文件
// 第二個(gè)參數(shù)為打開文件的模式,可選如下:
/*
O_RDONLY // 只讀模式打開文件
O_WRONLY // 只寫模式打開文件
O_RDWR // 讀寫模式打開文件
O_APPEND // 寫操作時(shí)將數(shù)據(jù)附加到文件尾部
O_CREATE // 如果不存在將創(chuàng)建一個(gè)新文件
O_EXCL // 和O_CREATE配合使用,文件必須不存在
O_SYNC // 打開文件用于同步I/O
O_TRUNC // 如果可能,打開時(shí)清空文件
*/
// 第三個(gè)參數(shù)為文件權(quán)限,請參考linux文件權(quán)限,664在這里為八進(jìn)制,代表:rw-rw-r--
logFile, err := os.OpenFile("e:/go.log", os.O_WRONLY | os.O_CREATE | os.O_APPEND, 0644)
if err != nil {
log.Fatal(err)
}
// 第一個(gè)參數(shù)為輸出io,可以是文件也可以是實(shí)現(xiàn)了該接口的對(duì)象,此處為日志文件;第二個(gè)參數(shù)為自定義前綴;第三個(gè)參數(shù)為輸出日志的格式選項(xiàng),可多選組合
// 第三個(gè)參數(shù)可選如下:
/*
Ldate = 1 // 日期:2009/01/23
Ltime = 2 // 時(shí)間:01:23:23
Lmicroseconds = 4 // 微秒分辨率:01:23:23.123123(用于增強(qiáng)Ltime位)
Llongfile = 8 // 文件全路徑名+行號(hào): /a/b/c/d.go:23
Lshortfile = 16 // 文件無路徑名+行號(hào):d.go:23(會(huì)覆蓋掉Llongfile)
LstdFlags = Ldate | Ltime // 標(biāo)準(zhǔn)logger的初始值
*/
debugLog := log.New(logFile, "[debug]", log.Ldate|log.Ltime|log.Llongfile)
// 日志輸出
debugLog.Print("日志測試Print輸出,處理同fmt.Print")
debugLog.Println("日志測試Println輸出,處理同fmt.Println")
debugLog.Printf("日志測試%s輸出,處理同fmt.Printf", "Printf")
// 日志輸出,同時(shí)直接終止程序,后續(xù)的操作都不會(huì)執(zhí)行
debugLog.Fatal("日志測試Fatal輸出,處理等價(jià)于:debugLog.Print()后,再執(zhí)行os.Exit(1)")
debugLog.Fatalln("日志測試Fatalln輸出,處理等價(jià)于:debugLog.Println()后,再執(zhí)行os.Exit(1)")
debugLog.Fatalf("日志測試%s輸出,處理等價(jià)于:debugLog.Print()后,再執(zhí)行os.Exit(1)", "Fatalf")
// 日志輸出,同時(shí)拋出異常,可用recover捕捉
defer func() {
if r := recover(); r != nil {
fmt.Println("===========", r)
}
}()
debugLog.Panic("日志測試Panic輸出,處理等價(jià)于:debugLog.Print()后,再執(zhí)行Panic()")
debugLog.Panicln("日志測試Panicln輸出,處理等價(jià)于:debugLog.Println()后,再執(zhí)行Panic()")
debugLog.Panicf("日志測試%s輸出,處理等價(jià)于:debugLog.Printf()后,再執(zhí)行Panic()", "Panicf")
fmt.Println("前綴為:", debugLog.Prefix()) // 前綴為: [debug]
fmt.Println("輸出選項(xiàng)為:", debugLog.Flags()) // 輸出選項(xiàng)為: 11
// 設(shè)置前綴
debugLog.SetPrefix("[info]")
// 設(shè)置輸出選項(xiàng)
debugLog.SetFlags(log.LstdFlags)
fmt.Println("前綴為:", debugLog.Prefix()) // 前綴為: [info]
fmt.Println("輸出選項(xiàng)為:", debugLog.Flags()) // 輸出選項(xiàng)為: 3
}
說明:以上代碼執(zhí)行時(shí)要分段注釋后執(zhí)行,否則執(zhí)行到:
debugLog.Fatal("日志測試Fatal輸出,處理等價(jià)于:debugLog.Print()后,再執(zhí)行os.Exit(1)")
便會(huì)終止
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。