最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

?? 實戰(zhàn)場景

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

log 包 - 使用 Logger

在 Go 中,內置了 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的日志")
}

輸出內容如下所示:

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.Fatallnlog.Panicln 信息對調,就能得到不同的輸出,繼而測試出 fatalpanic 的用法。

Logger 配置

在上文已經(jīng)看到,默認的 log 日志會輸出時間信息,我們可以在此基礎上進行擴展,將日志的記錄到文件中,輸出錯誤的行號。

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

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 的參數(shù)部分內容。

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 函數(shù)即可。

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

以上日志都是在控制臺進行的輸出,如果希望將日志記錄到文件中,可以配置日志輸出位置,此時用到的函數(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
	}
	// 設置輸出文件
	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 對象的時候,還可以使用其構造函數(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 相關寫法即可。

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

相關文章

  • Golang中context庫的高級應用

    Golang中context庫的高級應用

    context庫不僅對于提升代碼的效率和性能至關重要,而且還幫助開發(fā)者在復雜的系統(tǒng)中保持代碼的清晰和可維護性,下面我們就來看看context庫的高級應用吧
    2024-01-01
  • Go設計模式之單例模式圖文詳解

    Go設計模式之單例模式圖文詳解

    單例模式是一種創(chuàng)建型設計模式,讓你能夠保證一個類只有一個實例,并提供一個訪問該實例的全局節(jié)點,本文就通過圖文給大家介紹一下Go的單例模式,需要的朋友可以參考下
    2023-07-07
  • go?defer避坑指南之拆解延遲語句

    go?defer避坑指南之拆解延遲語句

    這篇文章主要為大家詳細介紹了go?defer避坑指南之如何拆解延遲語句,掌握正確使用方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-11-11
  • Golang三個編譯基本命令的使用小結

    Golang三個編譯基本命令的使用小結

    本文主要介紹了Golang三個編譯基本命令的使用小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • 向Rust學習Go考慮簡單字符串插值特性示例解析

    向Rust學習Go考慮簡單字符串插值特性示例解析

    這篇文章主要為大家介紹了向Rust學習Go考慮簡單字符串插值特性示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • go語言異常panic和恢復recover用法實例

    go語言異常panic和恢復recover用法實例

    這篇文章主要介紹了go語言異常panic和恢復recover用法,實例分析了異常panic和恢復recover使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • golang?channel多協(xié)程通信常用方法底層原理全面解析

    golang?channel多協(xié)程通信常用方法底層原理全面解析

    channel?是?goroutine?與?goroutine?之間通信的重要橋梁,借助?channel,我們能很輕易的寫出一個多協(xié)程通信程序,今天,我們就來看看這個?channel?的常用用法以及底層原理
    2023-09-09
  • golang Goroutine超時控制的實現(xiàn)

    golang Goroutine超時控制的實現(xiàn)

    日常開發(fā)中我們大概率會遇到超時控制的場景,比如一個批量耗時任務、網(wǎng)絡請求等,本文主要介紹了golang Goroutine超時控制的實現(xiàn),文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2023-09-09
  • 詳解如何使用Golang實現(xiàn)自定義規(guī)則引擎

    詳解如何使用Golang實現(xiàn)自定義規(guī)則引擎

    規(guī)則引擎的功能可以簡化為當滿足一些條件時觸發(fā)一些操作,通常使用 DSL 自定義語法來表述,本文給大家介紹了如何使用Golang實現(xiàn)自定義規(guī)則引擎,文中有相關的代碼示例供大家參考,需要的朋友可以參考下
    2024-05-05
  • 深入剖析Go語言中的Select語句

    深入剖析Go語言中的Select語句

    select是Go中的一個控制結構,類似于switch語句,本文主要介紹了深入剖析Go語言中的Select語句,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12

最新評論

洪洞县| 重庆市| 宣恩县| 瑞金市| 新乐市| 汨罗市| 江安县| 揭西县| 玉树县| 顺义区| 黔西| 同心县| 抚顺市| 平湖市| 合肥市| 明光市| 陵川县| 曲阜市| 综艺| 开阳县| 寻乌县| 漾濞| 永川市| 民乐县| 岐山县| 阳谷县| 五莲县| 莱州市| 平潭县| 佛教| 邻水| 常州市| 云安县| 伊宁县| 禄劝| 山阴县| 宜宾县| 彰化市| 达孜县| 荆门市| 剑阁县|