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

golang 日志log與logrus示例詳解

 更新時間:2025年03月31日 12:00:56   作者:草海桐  
log是Go語言標準庫中一個簡單的日志庫,本文給大家介紹golang 日志log與logrus示例詳解,感興趣的朋友一起看看吧

一、Go 標準庫 log 詳解

1. 功能特點

log 是 Go 語言標準庫中一個簡單的日志庫,主要功能包括:

  • 寫入日志到指定位置(默認為標準錯誤)
  • 支持_FATAL 和 _ERROR 等級別的日志
  • 支持格式化日志輸出

2. 常用函數(shù)

log 包中常用的函數(shù)如下:

函數(shù)名功能
log.Print輸出日志
log.Printf格式化輸出日志
log.Println輸出日志,自動換行
log.Fatal輸出日志并調(diào)用 os.Exit(1)
log.Fatalf格式化輸出日志并退出
log.Panic輸出日志并引發(fā) panic
log.Panicln格式化輸出日志并引發(fā) panic
log.SetFlags設(shè)置日志格式(日期、時間等)
log.SetOutput設(shè)置日志輸出目標

3. 示例代碼

package main  
import (  
    "log"  
    "os"  
)  
func main() {  
    // 1. 默認輸出到標準錯誤  
    log.Println("這是一條普通日志")  
    // 2. 格式化輸出  
    name := "Alice"  
    age := 30  
    log.Printf("用戶 %s 已經(jīng) %d 歲了\n", name, age)  
    // 3. 設(shè)置日志輸出目標為文件  
    file, err := os.OpenFile("log.txt", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)  
    if err != nil {  
        log.Fatal(err)  
    }  
    log.SetOutput(file)  
    log.Println("日志已切換到文件輸出")  
    // 4. 設(shè)置日志格式(默認包含時間信息)  
    log.SetFlags(log.LstdFlags)  
    //Ldate         = 1 << iota     // 使用本地時區(qū)的日期:2009/01/23
	//Ltime                         // 使用本地時區(qū)的時間:01:23:23
	//Lmicroseconds                 // 微秒精度的時間:01:23:23.123123。假設(shè)啟用了Ltime
	//Llongfile                     // 完整文件名和行號:/a/b/c/d.go:23
	//Lshortfile                    // 文件名的最后一部分和行號:d.go:23。覆蓋Llongfile
	//LUTC                          // 如果設(shè)置了Ldate或Ltime,則使用UTC而不是本地時區(qū)
	//Lmsgprefix                    // 將“前綴”從行首移動到消息之前
	//LstdFlags     = Ldate | Ltime // 標準logger的初始值,包含日期和時間
    log.Println("這是一條包含時間的日志")  
    log.Panic("Panic\n")
	//log.Fatal("Fatal\n")
}  

4. 優(yōu)勢和局限

優(yōu)勢

  • 內(nèi)置庫,使用簡單,不需要額外依賴。
  • 支持基本的日志輸出和格式化。

局限

  • 功能較簡單,不支持多日志級別(如 DEBUG、INFO、WARNING 等)。
  • 不支持 JSON 格式化輸出。
  • 不支持日志輪轉(zhuǎn)(logrotate)。

二、第三方庫 logrus 詳解

1. 功能特點

logrus 是 Go 語言中一個功能強大的日志庫,主要特點如下:

  • 支持多種日志級別:Debug、Info、Warning、Error、FatalPanic
  • 支持兩種輸出格式:text 和 json
  • 支持日志輪轉(zhuǎn)(結(jié)合 lumberjack 包)
  • 支持鉤子(Hooks)機制,擴展日志處理邏輯
  • 支持多種輸出目標(文件、網(wǎng)絡(luò)、console 等)

2. 核心功能

以下是 logrus 的核心功能:

          1 .多日志級別

logger.Debug("調(diào)試日志")  
logger.Info("信息日志")  
logger.Warn("警告日志")  
logger.Error("錯誤日志")  
logger.Fatal("致命錯誤")  
logger.Panic("panic 日志")  

        2. 格式化輸出

logger.WithFields(logrus.Fields{  
    "username": "Alice",  
    "age":       30,  
}).Info("用戶信息")  

        3. 切換輸出格式

// 切換到 JSON 格式  
logger.SetFormatter(&logrus.JSONFormatter{})  
// 配置日志格式為 text(默認)
//logger.SetFormatter(&logrus.TextFormatter{})

        4.設(shè)置日志輸出目標

logger.SetOutput(os.Stdout) // 輸出到標準輸出  

        5. 日志輪轉(zhuǎn)(結(jié)合 lumberjack)

// 須import(
    lumberjack "gopkg.in/natefinch/lumberjack.v2"
)
writer := &lumberjack.Logger{  
    Filename:   "logs/app.log",  
    MaxSize:     500, // MB  
    MaxBackups:  3,  
    MaxAge:      28, // days  
    Compress:   true,  
}  
logger.SetOutput(writer)  

3. 示例代碼

以下是一個完整的 logrus 示例代碼,包含日志級別、格式化、文件輪轉(zhuǎn)和鉤子功能:

package main  
import (  
    "log"  
    "os"  
    "os/signal"  
    "syscall"  
    "time"  
    lumberjack "gopkg.in/natefinch/lumberjack.v2" 
    "github.com/sirupsen/logrus"  
)  
func main() {  
    // 1. 創(chuàng)建 logger 實例  
    logger := logrus.New()  
    // 2. 配置日志級別  
    logger.SetLevel(logrus.InfoLevel)  
    // 3. 配置日志格式為 JSON  
    logger.SetFormatter(&logrus.JSONFormatter{})  
    // 4. 配置日志輪轉(zhuǎn)  
    writer := &lumberjack.Logger{  
        Filename:   "logs/app.log",  
        MaxSize:     500, // MB  
        MaxBackups:  3,  
        MaxAge:      28, // days  
        Compress:   true,  
    }  
    logger.SetOutput(writer)  
    // 5. 添加鉤子(Hook)  
    logger.AddHook(&MyHook{})  
    // 6. 寫入日志  
    logger.Info("這是一個 Info 級別的日志")  
    // 7. 帶字段的日志  
    logger.WithFields(logrus.Fields{  
        "username": "Bob",  
        "age":      25,  
    }).Error("用戶未找到")  
    // 8. 處理信號  
    signalChan := make(chan os.Signal, 1)  
    signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)  
    go func() {  
        <-signalChan  
        logger.Info("程序已優(yōu)雅退出")  
        os.Exit(0)  
    }()  
}  
// 自定義鉤子示例  
type MyHook struct{}  
func (*MyHook) Levels() []logrus.Level {  
    return []logrus.Level{  
        logrus.InfoLevel,  
        logrus.ErrorLevel,  
    }  
}  
func (*MyHook) Fire(entry *logrus.Entry) error {  
    // 鉤子邏輯:例如發(fā)送日志到遠程服務(wù)器  
    log.Printf("鉤子處理:%+v\n", entry)  
    return nil  
}  

4. 優(yōu)勢和擴展性

  • 優(yōu)勢
    • 功能強大,支持多日志級別和格式化。
    • 高度可定制,支持鉤子機制和多種輸出目標。
    • 社區(qū)生態(tài)豐富,廣泛應(yīng)用于生產(chǎn)環(huán)境。
  • 擴展性
    • 支持第三方庫擴展(如日志輪轉(zhuǎn)、網(wǎng)絡(luò)輸出等)。

三、總結(jié)

1. 何時選擇 log?

  • 當項目的日志需求簡單(只需要基本的日志輸出)。
  • 項目不希望引入額外的依賴。

2. 何時選擇 logrus

  • 項目需要多日志級別和格式化輸出。
  • 需要更高的可定制性和擴展性。
  • 需要支持日志輪轉(zhuǎn)和鉤子機制。

3. 對比總結(jié)

特性loglogrus
日志級別有限(Fatal、Error)多級別(Debug~Panic)
格式化輸出支持支持(Text/JSON)
日志輪轉(zhuǎn)不支持支持(需配合 lumberjack)
鉤子機制不支持支持
輸出目標標準輸出/文件多種(文件、網(wǎng)絡(luò)等)
社區(qū)和擴展性內(nèi)置庫第三方庫,社區(qū)豐富

到此這篇關(guān)于golang 日志log與logrus的文章就介紹到這了,更多相關(guān)golang 日志log與logrus內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入解析Go語言編程中slice切片結(jié)構(gòu)

    深入解析Go語言編程中slice切片結(jié)構(gòu)

    這篇文章主要介紹了Go語言編程中slice切片結(jié)構(gòu),其中Append方法的用法介紹較為詳細,需要的朋友可以參考下
    2015-10-10
  • 使用Go語言中的Context取消協(xié)程執(zhí)行的操作代碼

    使用Go語言中的Context取消協(xié)程執(zhí)行的操作代碼

    在 Go 語言中,協(xié)程(goroutine)是一種輕量級的線程,非常適合處理并發(fā)任務(wù),然而,如何優(yōu)雅地取消正在運行的協(xié)程是一個常見的問題,本文將通過一個具體的例子來展示如何使用 context 包來取消協(xié)程的執(zhí)行,需要的朋友可以參考下
    2024-11-11
  • Golang中Gin框架的使用入門教程

    Golang中Gin框架的使用入門教程

    這篇文章主要為大家詳細介紹了Golang中Gin框架的使用教程,文中通過簡單的示例為大家講解了Gin框架的安裝與使用,感興趣的小伙伴開業(yè)跟隨小編一起學習一下
    2022-10-10
  • golang網(wǎng)絡(luò)通信超時設(shè)置方式

    golang網(wǎng)絡(luò)通信超時設(shè)置方式

    這篇文章主要介紹了golang網(wǎng)絡(luò)通信超時設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 一文深入探索Go語言中的循環(huán)結(jié)構(gòu)

    一文深入探索Go語言中的循環(huán)結(jié)構(gòu)

    在編程中,循環(huán)結(jié)構(gòu)扮演著重要的角色,它使我們能夠有效地重復(fù)執(zhí)行特定的代碼塊,以實現(xiàn)各種任務(wù)和邏輯,在Go語言中,for 是 Go 中唯一的循環(huán)結(jié)構(gòu),本文將深入探討Go語言中的for循環(huán)類型以及它們的用法
    2023-08-08
  • Go語言實現(xiàn)優(yōu)雅關(guān)機和重啟的示例詳解

    Go語言實現(xiàn)優(yōu)雅關(guān)機和重啟的示例詳解

    優(yōu)雅的關(guān)機是指在關(guān)閉服務(wù)之前,先讓服務(wù)處理完當前正在處理的請求,然后再關(guān)閉服務(wù),本文主要為大家詳細介紹了如何使用Go語言實現(xiàn)優(yōu)雅關(guān)機和重啟,感興趣的小伙伴可以參考一下
    2025-04-04
  • Golang?中反射的應(yīng)用實例詳解

    Golang?中反射的應(yīng)用實例詳解

    這篇文章主要為大家介紹了Golang?中反射的應(yīng)用實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 一文搞懂Golang中的內(nèi)存逃逸

    一文搞懂Golang中的內(nèi)存逃逸

    內(nèi)存逃逸是 Go 語言中一個重要的概念,涉及到程序的性能優(yōu)化和內(nèi)存管理,了解內(nèi)存逃逸可以幫助我們編寫更高效的代碼,本文將從基本概念入手,深入講解 Go 語言中的內(nèi)存逃逸現(xiàn)象,以及如何避免,需要的朋友可以參考下
    2023-12-12
  • go語言中函數(shù)的用法示例詳解

    go語言中函數(shù)的用法示例詳解

    Go語言中函數(shù)是基本的代碼組織單元,用于封裝一段代碼,使代碼結(jié)構(gòu)更清晰、可復(fù)用,本文詳細講解了基本函數(shù)定義、參數(shù)傳遞、返回值、多返回值、匿名函數(shù)、遞歸和defer語句的使用,感興趣的朋友一起看看吧
    2024-10-10
  • golang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11

最新評論

华阴市| 石阡县| 甘肃省| 永顺县| 唐海县| 手机| 晋州市| 黑山县| 高碑店市| 万安县| 信阳市| 郯城县| 福清市| 桃园县| 枞阳县| 海城市| 游戏| 九江市| 志丹县| 济源市| 淮安市| 兴安县| 革吉县| 五台县| 上杭县| 沂水县| 奉化市| 巩义市| 浮山县| 鸡东县| 抚松县| 公安县| 江永县| 汕头市| 辉南县| 天津市| 乡城县| 正阳县| 莲花县| 宝应县| 高尔夫|