go語言中的log 包示例詳解
Go語言的log
包提供了用于記錄日志的基本功能。相比fmt
包,log
包增加了時(shí)間戳、日志級(jí)別等日志管理功能,非常適合用于調(diào)試和記錄運(yùn)行信息。下面是對(duì)log
包的詳細(xì)說明,以及它與fmt
包的區(qū)別。
1. log包的基礎(chǔ)功能
log
包中包含一系列函數(shù),可以用于打印帶時(shí)間戳的日志信息,默認(rèn)將日志寫入標(biāo)準(zhǔn)錯(cuò)誤輸出(os.Stderr
),并在每條日志的開頭添加時(shí)間戳。
常用函數(shù)
log.Print
:基本日志輸出函數(shù),類似于fmt.Print
,但會(huì)在輸出前添加時(shí)間戳。
log.Println
:類似于fmt.Println
,會(huì)在輸出前添加時(shí)間戳,并在結(jié)尾添加換行符。
log.Printf
:類似于fmt.Printf
,支持格式化輸出,并在輸出前添加時(shí)間戳。
示例代碼:
package main import "log" func main() { log.Print("This is a log message.") log.Println("This is another log message.") log.Printf("Formatted log: %d + %d = %d", 2, 3, 2+3) }
2. log包的日志級(jí)別函數(shù)
log
包還提供了兩種特殊的日志函數(shù),用于處理錯(cuò)誤和程序退出的情況:
log.Fatal
:用于記錄嚴(yán)重的錯(cuò)誤信息,輸出日志后會(huì)調(diào)用os.Exit(1)
,終止程序執(zhí)行。
log.Panic
:用于記錄錯(cuò)誤信息,同時(shí)調(diào)用panic
,引發(fā)恐慌(程序崩潰并拋出堆棧信息),適合用于調(diào)試和處理非正常情況。
示例代碼:
package main import "log" func main() { log.Print("This is a normal log.") log.Fatal("This is a fatal error log, program will exit.") // 輸出后程序會(huì)退出 log.Panic("This will not be executed because of Fatal above.") }
3. 自定義日志輸出位置
log
包默認(rèn)將日志輸出到標(biāo)準(zhǔn)錯(cuò)誤流(os.Stderr
),但是可以通過log.SetOutput
方法自定義輸出位置。可以將日志輸出到文件、網(wǎng)絡(luò)或其他符合io.Writer
接口的目標(biāo)。
示例:將日志輸出到文件
package main import ( "log" "os" ) func main() { file, err := os.Create("app.log") if err != nil { log.Fatal("Failed to create log file:", err) } defer file.Close() log.SetOutput(file) // 將日志輸出設(shè)置為文件 log.Println("This log will be written to app.log file.") }
4. 自定義日志前綴和標(biāo)記
log
包允許自定義日志的前綴和格式,幫助識(shí)別日志的來源或類型。使用log.SetPrefix
方法可以設(shè)置日志的前綴,使用log.SetFlags
可以控制日志的標(biāo)記。
日志標(biāo)記
log
包提供了以下幾個(gè)標(biāo)記(使用SetFlags
設(shè)置):
log.Ldate
:日期(yyyy/mm/dd)。log.Ltime
:時(shí)間(hh:mm)。log.Lmicroseconds
:微秒級(jí)時(shí)間。log.Llongfile
:完整文件路徑和行號(hào)。log.Lshortfile
:簡(jiǎn)短文件名和行號(hào)。log.LUTC
:使用UTC時(shí)間。log.LstdFlags
:默認(rèn)標(biāo)記,等價(jià)于log.Ldate | log.Ltime
。
示例:自定義日志前綴和標(biāo)記
package main import "log" func main() { log.SetPrefix("INFO: ") // 設(shè)置日志前綴 log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) // 設(shè)置日志標(biāo)記 log.Println("This is a customized log message.") }
5. 創(chuàng)建自定義的日志記錄器
使用log.New
可以創(chuàng)建自定義的日志記錄器(Logger),并指定不同的輸出目標(biāo)、前綴和標(biāo)記。多個(gè)日志記錄器可以記錄不同類型的日志信息。
示例:創(chuàng)建兩個(gè)不同的日志記錄器
package main import ( "log" "os" ) func main() { // 創(chuàng)建錯(cuò)誤日志記錄器,輸出到標(biāo)準(zhǔn)錯(cuò)誤 errorLogger := log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile) // 創(chuàng)建信息日志記錄器,輸出到文件 infoFile, err := os.Create("info.log") if err != nil { log.Fatal(err) } defer infoFile.Close() infoLogger := log.New(infoFile, "INFO: ", log.Ldate|log.Ltime) infoLogger.Println("This is an informational message.") errorLogger.Println("This is an error message.") }
log包與fmt包的區(qū)別
用途不同:
fmt
包主要用于格式化輸入和輸出,適合輸出一般信息,不具備日志管理功能。log
包專為日志設(shè)計(jì),提供日志記錄功能,適合程序中的重要信息、錯(cuò)誤、調(diào)試信息等的輸出。
輸出內(nèi)容不同:
fmt
包輸出沒有時(shí)間戳,默認(rèn)不包含額外信息。log
包輸出包含時(shí)間戳,且可以設(shè)置額外的標(biāo)記和前綴。
輸出位置:
fmt
包的輸出目標(biāo)默認(rèn)為標(biāo)準(zhǔn)輸出(os.Stdout
),可以通過fmt.Fprint
將輸出定向到指定目標(biāo)。log
包的默認(rèn)輸出為標(biāo)準(zhǔn)錯(cuò)誤(os.Stderr
),且可以通過log.SetOutput
輕松修改輸出目標(biāo)。
日志級(jí)別:
fmt
包沒有日志級(jí)別的概念。log
包提供了日志級(jí)別的支持(如Fatal
和Panic
)。
程序控制:
fmt
包的函數(shù)不會(huì)影響程序的控制流程。log.Fatal
會(huì)終止程序,log.Panic
會(huì)引發(fā)恐慌,幫助處理異常情況。
總結(jié)
fmt
包適合通用的格式化輸出,如打印普通消息、調(diào)試輸出等。log
包適合用于正式的日志記錄,提供時(shí)間戳、日志級(jí)別、日志標(biāo)記和自定義輸出等特性,能夠更好地記錄和追蹤程序的運(yùn)行狀態(tài)。
到此這篇關(guān)于go語言中的log 包詳解的文章就介紹到這了,更多相關(guān)go語言log 包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang?db事務(wù)的統(tǒng)一封裝的實(shí)現(xiàn)
這篇文章主要介紹了golang db事務(wù)的統(tǒng)一封裝的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12多階段構(gòu)建優(yōu)化Go?程序Docker鏡像
這篇文章主要為大家介紹了多階段構(gòu)建優(yōu)化Go?程序Docker鏡像,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Go簡(jiǎn)單實(shí)現(xiàn)協(xié)程池的實(shí)現(xiàn)示例
本文主要介紹了Go簡(jiǎn)單實(shí)現(xiàn)協(xié)程池的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06Golang中實(shí)現(xiàn)簡(jiǎn)單的Http Middleware
本文主要針對(duì)Golang的內(nèi)置庫(kù) net/http 做了簡(jiǎn)單的擴(kuò)展,實(shí)現(xiàn)簡(jiǎn)單的Http Middleware,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07Go語言并發(fā)編程之控制并發(fā)數(shù)量實(shí)現(xiàn)實(shí)例
這篇文章主要為大家介紹了Go語言并發(fā)編程之控制并發(fā)數(shù)量實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01基于Golang實(shí)現(xiàn)YOLO目標(biāo)檢測(cè)算法
目標(biāo)檢測(cè)是計(jì)算機(jī)視覺領(lǐng)域的重要任務(wù),它不僅可以識(shí)別圖像中的物體,還可以標(biāo)記出物體的位置和邊界框,YOLO是一種先進(jìn)的目標(biāo)檢測(cè)算法,以其高精度和實(shí)時(shí)性而聞名,本文將介紹如何使用Golang實(shí)現(xiàn)YOLO目標(biāo)檢測(cè)算法,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下2023-11-11