Go常用技能日志log包創(chuàng)建使用示例
?? 實戰(zhàn)場景
在日常開發(fā)中,用到做最多的知識點除了字符串操作外,就數(shù)日志模塊最常用了,畢竟有日志調(diào)試和修改 BUG 才方便,而且如果你是編程知識的初學者,更是建議先學習一下日志相關(guān)知識。
log 包 - 使用 Logger
在 Go 中,內(nèi)置了 log 包實現(xiàn)簡單日志的記錄功能,如果你有 Python 中 logger 模塊的使用經(jīng)驗,學習起來也是非常簡單的。
log 包中定義了一個 Logger 類型,其中包含的函數(shù)有 Print 系列函數(shù),Fatal 系列函數(shù),Panic 系列。
接下來直接看一段 log 包基本使用的代碼:
package main
import (
"log"
)
func main() {
log.Println("輸出普通日志") // 待換行
v := "xxxx"
log.Printf("輸出格式化 %s 日志 \n", v)
log.Fatalln("輸出fatal的日志")
log.Panicln("輸出panic的日志")
}
輸出內(nèi)容如下所示:
2022/07/31 16:47:01 輸出普通日志
2022/07/31 16:47:01 輸出格式化 xxxx 日志
2022/07/31 16:47:01 輸出fatal的日志
exit status 1
可以發(fā)現(xiàn)其與標準輸出有一個大的差異點,即每條輸出信息都攜帶了當下時間。
在時間的時候,可以將 log.Fatalln 和 log.Panicln 信息對調(diào),就能得到不同的輸出,繼而測試出 fatal 和 panic 的用法。
Logger 配置
在上文已經(jīng)看到,默認的 log 日志會輸出時間信息,我們可以在此基礎(chǔ)上進行擴展,將日志的記錄到文件中,輸出錯誤的行號。
此時需要使用 SetFlags 函數(shù),具體如下所示。
package main
import (
"log"
)
func main() {
// 文件全路徑名+行號,錯誤的時間(精確到微秒級別),錯誤信息
log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
log.Println("日志輸出")
}
此時的日志輸出內(nèi)容如下所示:
2022/07/31 16:53:23.468018 G:/goProject/06_demo.go:10: 日志輸出
log 包還提供了其它選項,都是常量,即上述代碼 SetFlags 的參數(shù)部分內(nèi)容。
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的初始值
)
還可以對日志的前綴進行設(shè)置,使用 SetPrefix 函數(shù)即可。
func main() {
log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
log.Println("日志輸出1")
log.SetPrefix("[橡皮擦專用]")
log.Println("日志輸出2")
}
此時的日志輸出如下內(nèi)容:
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
以上日志都是在控制臺進行的輸出,如果希望將日志記錄到文件中,可以配置日志輸出位置,此時用到的函數(shù)是 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
}
// 設(shè)置輸出文件
log.SetOutput(logFile)
log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
log.Println("日志輸出1")
log.SetPrefix("[橡皮擦專用]")
log.Println("日志輸出2")
}
這是運行代碼,就會發(fā)現(xiàn)會在項目根目錄創(chuàng)建一個文件,其中包含所有日志輸出。
在創(chuàng)建 logger 對象的時候,還可以使用其構(gòu)造函數(shù) New 實現(xiàn)。
使用 New 創(chuàng)建 logger
New 函數(shù)的的原型如下:
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("普通日志")
}
可以看到比前文的代碼要精簡了許多,實戰(zhàn)遇到簡單日志,可以直接采用 New 相關(guān)寫法即可。
以上就是Go常用技能日志log包創(chuàng)建使用示例的詳細內(nèi)容,更多關(guān)于Go日志log包的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
golang?channel多協(xié)程通信常用方法底層原理全面解析
channel?是?goroutine?與?goroutine?之間通信的重要橋梁,借助?channel,我們能很輕易的寫出一個多協(xié)程通信程序,今天,我們就來看看這個?channel?的常用用法以及底層原理2023-09-09
詳解如何使用Golang實現(xiàn)自定義規(guī)則引擎
規(guī)則引擎的功能可以簡化為當滿足一些條件時觸發(fā)一些操作,通常使用 DSL 自定義語法來表述,本文給大家介紹了如何使用Golang實現(xiàn)自定義規(guī)則引擎,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下2024-05-05

