標籤:Go語言日誌 Go語言log golangTlog
Golang提供了原生日誌庫“log”,使用簡單方便,本文以代碼為例進行說明介紹。
package mainimport ( "os" "log" "fmt")func main() { // 開啟記錄檔 // 第二個參數為開啟檔案的模式,可選如下: /* O_RDONLY // 唯讀模式開啟檔案 O_WRONLY // 唯寫模式開啟檔案 O_RDWR // 讀寫入模式開啟檔案 O_APPEND // 寫操作時將資料附加到檔案尾部 O_CREATE // 如果不存在將建立一個新檔案 O_EXCL // 和O_CREATE配合使用,檔案必須不存在 O_SYNC // 開啟檔案用於同步I/O O_TRUNC // 如果可能,開啟時清空檔案 */ // 第三個參數為檔案許可權,請參考linux檔案許可權,664在這裡為八進位,代表: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) } // 第一個參數為輸出io,可以是檔案也可以是實現了該介面的對象,此處為記錄檔;第二個參數為自訂首碼;第三個參數為輸出日誌的格式選項,可多選組合 // 第三個參數可選如下: /* Ldate = 1 // 日期:2009/01/23 Ltime = 2 // 時間:01:23:23 Lmicroseconds = 4 // 微秒解析度:01:23:23.123123(用於增強Ltime位) Llongfile = 8 // 檔案全路徑名+行號: /a/b/c/d.go:23 Lshortfile = 16 // 檔案無路徑名+行號:d.go:23(會覆蓋掉Llongfile) LstdFlags = Ldate | Ltime // 標準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") // 日誌輸出,同時直接終止程式,後續的操作都不會執行 debugLog.Fatal("日誌測試Fatal輸出,處理等價於:debugLog.Print()後,再執行os.Exit(1)") debugLog.Fatalln("日誌測試Fatalln輸出,處理等價於:debugLog.Println()後,再執行os.Exit(1)") debugLog.Fatalf("日誌測試%s輸出,處理等價於:debugLog.Print()後,再執行os.Exit(1)", "Fatalf") // 日誌輸出,同時拋出異常,可用recover捕捉 defer func() { if r := recover(); r != nil { fmt.Println("===========", r) } }() debugLog.Panic("日誌測試Panic輸出,處理等價於:debugLog.Print()後,再執行Panic()") debugLog.Panicln("日誌測試Panicln輸出,處理等價於:debugLog.Println()後,再執行Panic()") debugLog.Panicf("日誌測試%s輸出,處理等價於:debugLog.Printf()後,再執行Panic()", "Panicf") fmt.Println("首碼為:", debugLog.Prefix()) // 首碼為: [debug] fmt.Println("輸出選項為:", debugLog.Flags()) // 輸出選項為: 11 // 設定首碼 debugLog.SetPrefix("[info]") // 設定輸出選項 debugLog.SetFlags(log.LstdFlags) fmt.Println("首碼為:", debugLog.Prefix()) // 首碼為: [info] fmt.Println("輸出選項為:", debugLog.Flags()) // 輸出選項為: 3}
說明:以上代碼執行時要分段注釋後執行,否則執行到:
debugLog.Fatal("日誌測試Fatal輸出,處理等價於:debugLog.Print()後,再執行os.Exit(1)")
便會終止
Go語言中Tlog,log包的使用