欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go常用技能日志log包創(chuàng)建使用示例

 更新時(shí)間:2022年08月01日 14:10:42   作者:夢(mèng)想橡皮擦  
這篇文章主要為大家介紹了Go常用技能日志log包創(chuàng)建使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

?? 實(shí)戰(zhàn)場(chǎng)景

在日常開發(fā)中,用到做最多的知識(shí)點(diǎn)除了字符串操作外,就數(shù)日志模塊最常用了,畢竟有日志調(diào)試和修改 BUG 才方便,而且如果你是編程知識(shí)的初學(xué)者,更是建議先學(xué)習(xí)一下日志相關(guān)知識(shí)。

log 包 - 使用 Logger

在 Go 中,內(nèi)置了 log 包實(shí)現(xiàn)簡(jiǎn)單日志的記錄功能,如果你有 Python 中 logger 模塊的使用經(jīng)驗(yàn),學(xué)習(xí)起來也是非常簡(jiǎn)單的。

log 包中定義了一個(gè) 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)其與標(biāo)準(zhǔn)輸出有一個(gè)大的差異點(diǎn),即每條輸出信息都攜帶了當(dāng)下時(shí)間。

在時(shí)間的時(shí)候,可以將 log.Fatallnlog.Panicln 信息對(duì)調(diào),就能得到不同的輸出,繼而測(cè)試出 fatalpanic 的用法。

Logger 配置

在上文已經(jīng)看到,默認(rèn)的 log 日志會(huì)輸出時(shí)間信息,我們可以在此基礎(chǔ)上進(jìn)行擴(kuò)展,將日志的記錄到文件中,輸出錯(cuò)誤的行號(hào)。

此時(shí)需要使用 SetFlags 函數(shù),具體如下所示。

package main
import (
	"log"
)
func main() {
	// 文件全路徑名+行號(hào),錯(cuò)誤的時(shí)間(精確到微秒級(jí)別),錯(cuò)誤信息
	log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
	log.Println("日志輸出")
}

此時(shí)的日志輸出內(nèi)容如下所示:

2022/07/31 16:53:23.468018 G:/goProject/06_demo.go:10: 日志輸出

log 包還提供了其它選項(xiàng),都是常量,即上述代碼 SetFlags 的參數(shù)部分內(nèi)容。

const (
    Ldate         = 1 << iota     // 日期:2022/07/31
    Ltime                         // 時(shí)間:16:53:23
    Lmicroseconds                 // 微秒級(jí)別時(shí)間:16:53:23.468018
    Llongfile                     // 文件全路徑名+行號(hào): G:/goProject/06_demo.go:10
    Lshortfile                    // 文件名+行號(hào):06_demo.go:10
    LUTC                          // 使用UTC時(shí)間
    LstdFlags     = Ldate | Ltime // 標(biāo)準(zhǔn)logger的初始值
)

還可以對(duì)日志的前綴進(jìn)行設(shè)置,使用 SetPrefix 函數(shù)即可。

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

此時(shí)的日志輸出如下內(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

以上日志都是在控制臺(tái)進(jìn)行的輸出,如果希望將日志記錄到文件中,可以配置日志輸出位置,此時(shí)用到的函數(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("打開文件失敗,錯(cuò)誤信息:", err)
		return
	}
	// 設(shè)置輸出文件
	log.SetOutput(logFile)
	log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
	log.Println("日志輸出1")
	log.SetPrefix("[橡皮擦專用]")
	log.Println("日志輸出2")
}

這是運(yùn)行代碼,就會(huì)發(fā)現(xiàn)會(huì)在項(xiàng)目根目錄創(chuàng)建一個(gè)文件,其中包含所有日志輸出。

在創(chuàng)建 logger 對(duì)象的時(shí)候,還可以使用其構(gòu)造函數(shù) New 實(shí)現(xiàn)。

使用 New 創(chuàng)建 logger

New 函數(shù)的的原型如下:

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

接下來直接看示例代碼學(xué)習(xí)即可。

package main
import (
	"log"
	"os"
)
func main() {
	logger := log.New(os.Stdout, "[橡皮擦專用前綴]", log.Lshortfile|log.Ldate)
	logger.Println("普通日志")
}

可以看到比前文的代碼要精簡(jiǎn)了許多,實(shí)戰(zhàn)遇到簡(jiǎn)單日志,可以直接采用 New 相關(guān)寫法即可。

以上就是Go常用技能日志log包創(chuàng)建使用示例的詳細(xì)內(nèi)容,更多關(guān)于Go日志log包的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang 獲取系統(tǒng)信息的實(shí)現(xiàn)

    Golang 獲取系統(tǒng)信息的實(shí)現(xiàn)

    本文主要介紹了Golang 獲取系統(tǒng)信息的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • zap接收gin框架默認(rèn)的日志并配置日志歸檔示例

    zap接收gin框架默認(rèn)的日志并配置日志歸檔示例

    本文介紹了在基于gin框架開發(fā)的項(xiàng)目中如何配置并使用zap來接收并記錄gin框架默認(rèn)的日志和如何配置日志歸檔。有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-04-04
  • 解決golang時(shí)間字符串轉(zhuǎn)time.Time的坑

    解決golang時(shí)間字符串轉(zhuǎn)time.Time的坑

    這篇文章主要介紹了解決golang時(shí)間字符串轉(zhuǎn)time.Time的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go語言for range(按照鍵值循環(huán))遍歷操作

    Go語言for range(按照鍵值循環(huán))遍歷操作

    這篇文章主要介紹了Go語言for range(按照鍵值循環(huán))遍歷操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • gin 獲取post請(qǐng)求的json body操作

    gin 獲取post請(qǐng)求的json body操作

    這篇文章主要介紹了gin 獲取post請(qǐng)求的json body操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Golang中的Interface詳解

    Golang中的Interface詳解

    本文詳細(xì)講解了Golang中的Interface,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • 解決go在函數(shù)退出后子協(xié)程的退出問題

    解決go在函數(shù)退出后子協(xié)程的退出問題

    這篇文章主要介紹了解決go在函數(shù)退出后子協(xié)程的退出問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 圖文詳解go語言反射實(shí)現(xiàn)原理

    圖文詳解go語言反射實(shí)現(xiàn)原理

    這篇文章主要介紹了圖文詳解go語言反射實(shí)現(xiàn)原理,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧,需要的朋友可以參考下
    2020-02-02
  • golang中g(shù)in框架接入jwt使用token驗(yàn)證身份

    golang中g(shù)in框架接入jwt使用token驗(yàn)證身份

    本文主要介紹了golang中g(shù)in框架接入jwt使用token驗(yàn)證身份,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 利用Go語言實(shí)現(xiàn)輕量級(jí)OpenLdap弱密碼檢測(cè)工具

    利用Go語言實(shí)現(xiàn)輕量級(jí)OpenLdap弱密碼檢測(cè)工具

    這篇文章主要為大家詳細(xì)介紹了如何利用Go語言實(shí)現(xiàn)輕量級(jí)OpenLdap弱密碼檢測(cè)工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下
    2022-09-09

最新評(píng)論