首頁 > 軟體

Go常用技能紀錄檔log包建立使用範例

2022-08-01 18:04:19

⛳️ 實戰場景

在日常開發中,用到做最多的知識點除了字串操作外,就數紀錄檔模組最常用了,畢竟有紀錄檔偵錯和修改 BUG 才方便,而且如果你是程式設計知識的初學者,更是建議先學習一下紀錄檔相關知識。

log 包 - 使用 Logger

在 Go 中,內建了 log 包實現簡單紀錄檔的記錄功能,如果你有 Python 中 logger 模組的使用經驗,學習起來也是非常簡單的。

log 包中定義了一個 Logger 型別,其中包含的函數有 Print 系列函數,Fatal 系列函數,Panic 系列。

接下來直接看一段 log 包基本使用的程式碼:

package main
import (
	"log"
)
func main() {
	log.Println("輸出普通紀錄檔") // 待換行
	v := "xxxx"
	log.Printf("輸出格式化 %s 紀錄檔 n", v)
	log.Fatalln("輸出fatal的紀錄檔")
	log.Panicln("輸出panic的紀錄檔")
}

輸出內容如下所示:

2022/07/31 16:47:01 輸出普通紀錄檔
2022/07/31 16:47:01 輸出格式化 xxxx 紀錄檔
2022/07/31 16:47:01 輸出fatal的紀錄檔
exit status 1

可以發現其與標準輸出有一個大的差異點,即每條輸出資訊都攜帶了當下時間。

在時間的時候,可以將 log.Fatallnlog.Panicln 資訊對調,就能得到不同的輸出,繼而測試出 fatalpanic 的用法。

Logger 設定

在上文已經看到,預設的 log 紀錄檔會輸出時間資訊,我們可以在此基礎上進行擴充套件,將紀錄檔的記錄到檔案中,輸出錯誤的行號。

此時需要使用 SetFlags 函數,具體如下所示。

package main
import (
	"log"
)
func main() {
	// 檔案全路徑名+行號,錯誤的時間(精確到微秒級別),錯誤資訊
	log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
	log.Println("紀錄檔輸出")
}

此時的紀錄檔輸出內容如下所示:

2022/07/31 16:53:23.468018 G:/goProject/06_demo.go:10: 紀錄檔輸出

log 包還提供了其它選項,都是常數,即上述程式碼 SetFlags 的引數部分內容。

const (
    Ldate         = 1 << iota     // 日期:2022/07/31
    Ltime                         // 時間:16:53:23
    Lmicroseconds                 // 微秒級別時間:16:53:23.468018
    Llongfile                     // 檔案全路徑名+行號: G:/goProject/06_demo.go:10
    Lshortfile                    // 檔名+行號:06_demo.go:10
    LUTC                          // 使用UTC時間
    LstdFlags     = Ldate | Ltime // 標準logger的初始值
)

還可以對紀錄檔的字首進行設定,使用 SetPrefix 函數即可。

func main() {
	log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
	log.Println("紀錄檔輸出1")
	log.SetPrefix("[橡皮擦專用]")
	log.Println("紀錄檔輸出2")
}

此時的紀錄檔輸出如下內容:

2022/07/31 16:57:19.350118 G:/goProject/06_demo.go:9: 紀錄檔輸出1
[橡皮擦專用]2022/07/31 16:57:19.358230 G:/goProject/06_demo.go:11: 紀錄檔輸出2

以上紀錄檔都是在控制檯進行的輸出,如果希望將紀錄檔記錄到檔案中,可以設定紀錄檔輸出位置,此時用到的函數是 SetOutput,程式碼如下:

package main
import (
	"fmt"
	"log"
	"os"
)
func main() {
	logFile, err := os.OpenFile("./error.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
	if err != nil {
		fmt.Println("開啟檔案失敗,錯誤資訊:", err)
		return
	}
	// 設定輸出檔案
	log.SetOutput(logFile)
	log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
	log.Println("紀錄檔輸出1")
	log.SetPrefix("[橡皮擦專用]")
	log.Println("紀錄檔輸出2")
}

這是執行程式碼,就會發現會在專案根目錄建立一個檔案,其中包含所有紀錄檔輸出。

在建立 logger 物件的時候,還可以使用其建構函式 New 實現。

使用 New 建立 logger

New 函數的的原型如下:

func New(out io.Writer, prefix string, flag int) *Logger

接下來直接看範例程式碼學習即可。

package main
import (
	"log"
	"os"
)
func main() {
	logger := log.New(os.Stdout, "[橡皮擦專用字首]", log.Lshortfile|log.Ldate)
	logger.Println("普通紀錄檔")
}

可以看到比前文的程式碼要精簡了許多,實戰遇到簡單紀錄檔,可以直接採用 New 相關寫法即可。

以上就是Go常用技能紀錄檔log包建立使用範例的詳細內容,更多關於Go紀錄檔log包的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com