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

Golang?logrus?的入門教程

 更新時間:2026年04月21日 09:23:58   作者:戀喵大鯉魚  
本文主要介紹了Golang?logrus?快速上手,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.logrus 是什么?

logrus 是一款流行的 Golang 日志庫,具有非常靈活的配置選項。它支持多種日志級別、日志格式和輸出方式,包括文本格式和 JSON 格式的輸出,以及在控制臺輸出、文件輸出、發(fā)送到遠(yuǎn)程服務(wù)、發(fā)送到 Slack 等。logrus 也可以通過 Hooks 實現(xiàn)日志的異步輸出和處理。

總的來說,logrus 使用方便,功能齊全,適合大部分項目的日志記錄需求。

2.logrus 快速上手

1.安裝 logrus

使用 go get 命令安裝 logrus:

go get github.com/sirupsen/logrus

2.創(chuàng)建 Logger 對象

在程序中引入 logrus 包,并創(chuàng)建一個 Logger 對象:

import "github.com/sirupsen/logrus"
var log = logrus.New()

當(dāng)然,你也可以使用全局缺省的 Logger 對象 std。其定義如下:

var (
	// std is the name of the standard logger in stdlib `log`
	std = New()
)
// Creates a new logger. Configuration should be set by changing `Formatter`,
// `Out` and `Hooks` directly on the default logger instance. You can also just
// instantiate your own:
//
//    var log = &logrus.Logger{
//      Out: os.Stderr,
//      Formatter: new(logrus.TextFormatter),
//      Hooks: make(logrus.LevelHooks),
//      Level: logrus.DebugLevel,
//    }
//
// It's recommended to make this a global instance called `log`.
func New() *Logger {
	return &Logger{
		Out:          os.Stderr,
		Formatter:    new(TextFormatter),
		Hooks:        make(LevelHooks),
		Level:        InfoLevel,
		ExitFunc:     os.Exit,
		ReportCaller: false,
	}
}

3.配置 Logger 對象

可以通過 Logger 對象的方法來配置 Logger,例如設(shè)置日志輸出格式、設(shè)置日志級別等等。以下是一個例子:

log.SetFormatter(&logrus.TextFormatter{})
log.SetLevel(logrus.DebugLevel)

4.打印日志

可以使用 Logger 對象的方法來打印日志,例如:

log.Info("This is an info log.")
log.Warn("This is a warning log.")
log.Error("This is an error log.")

可以通過不同的方法來打印不同級別的日志,常見日志級別有 Trace、Debug、Info、Warn、Error 和 Fatal。

5.輸出日志

Logger 對象默認(rèn)將日志輸出到 os.Stderr,可以通過 Logger 對象的 Out 屬性來指定輸出到其他的 io.Writer,例如:

log.Out = os.Stdout

可以通過Logger對象的Hook屬性來添加Hook,實現(xiàn)異步輸出和處理日志的需求,例如:

log.Hooks.Add(hook)

這些就是logrus的基本使用方法,可以根據(jù)具體需求來使用logrus的其他高級功能。

3.logrus 實現(xiàn)日志滾動

在實際開發(fā)過程中,為了節(jié)省磁盤和方便查看,日志需要按照時間或者大小維度進(jìn)行切割分成多分歸檔過期的日志,刪除久遠(yuǎn)的日志.這個就是在日常開發(fā)中經(jīng)常遇見的日志滾動(log rotation)。

那么在 logrus 中我們該如何實現(xiàn)這個功能呢? logrus 本身并沒有實現(xiàn)滾動日志功能,但是我們可以使用第三方滾動插件實現(xiàn)。

我們可以使用 lumberjack 實現(xiàn) logrus 的滾動日志,具體實現(xiàn)如下:

package main
import (
	log "github.com/Sirupsen/logrus"
	"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
	logger := &lumberjack.Logger{
    	// 日志輸出文件路徑。
		Filename:   "/var/log/myapp/foo.log", 
    	// 日志文件最大 size, 單位是 MB。
		MaxSize:    100,
    	// 最大過期日志保留的個數(shù)。
		MaxBackups: 10,
    	// 保留過期文件的最大時間間隔,單位天。
		MaxAge:     30,
    	// 是否需要壓縮滾動日志, 使用的 gzip 壓縮,缺省為 false。
		Compress:   true,
	}
	log.SetOutput(logger) // 設(shè)置 logrus 的 io.Writer
}

滾動日志的各項參數(shù)如注釋所示,logrus 的 setOutput() 函數(shù)的入?yún)⑹?io.Writer 類型,lumberjack.Logger 實現(xiàn)了該接口。

4.一個完整的示例

這里使用 logrus 缺省的 Logger 對象,對其進(jìn)行各項配置。

import (
	"fmt"
	"io"
	"os"
	"github.com/sirupsen/logrus"
	lumberjack "gopkg.in/natefinch/lumberjack.v2"
)
// Level 日志級別。建議從服務(wù)配置讀取。
var LogConf = struct {
	Dir     string `yaml:"dir"`
	Name    string `yaml:"name"`
	Level   string `yaml:"level"`
	MaxSize int    `yaml:"max_size"`
}{
	Dir:     "./logs",
	Name:    "yourlogname.log",
	Level:   "trace",
	MaxSize: 100,
}
// Init logrus logger.
func InitLogger() error {
	// 設(shè)置日志格式。
	logrus.SetFormatter(&logrus.TextFormatter{
		TimestampFormat: "2006-01-02 15:04:05.000",
	})
	switch Level {
	case "trace":
		logrus.SetLevel(logrus.TraceLevel)
	case "debug":
		logrus.SetLevel(logrus.DebugLevel)
	case "info":
		logrus.SetLevel(logrus.InfoLevel)
	case "warn":
		logrus.SetLevel(logrus.WarnLevel)
	case "error":
		logrus.SetLevel(logrus.ErrorLevel)
	case "fatal":
		logrus.SetLevel(logrus.FatalLevel)
	case "panic":
		logrus.SetLevel(logrus.PanicLevel)
	}
	logrus.SetReportCaller(true) // 打印文件、行號和主調(diào)函數(shù)。
	// 實現(xiàn)日志滾動。
	// Refer to https://www.cnblogs.com/jssyjam/p/11845475.html.
	logger := &lumberjack.Logger{
		Filename:   fmt.Sprintf("%v/%v", LogConf.Dir, LogConf.Name), // 日志輸出文件路徑。
		MaxSize:    LogConf.MaxSize,                                 // 日志文件最大 size(MB),缺省 100MB。
		MaxBackups: 10,                                              // 最大過期日志保留的個數(shù)。
		MaxAge:     30,                                              // 保留過期文件的最大時間間隔,單位是天。
		LocalTime:  true,                                            // 是否使用本地時間來命名備份的日志。
	}
	// 同時輸出到標(biāo)準(zhǔn)輸出與文件。
	logrus.SetOutput(io.MultiWriter(logger, os.Stdout))
	return nil
}

5.小結(jié)

logrus 還有很多高級的用法,如有需要,可以深入研究。

此外,除了 logrus,Golang 還有很多好用的日志庫,以下是幾個比較流行的:

  • log

Golang 自帶了一個 log 包,可以滿足基本的日志需求。這個包有幾個函數(shù):Print、Printf、Println、Fatal、Fatalf、Fatalln、Panic、Panicf、Panicln,可以滿足大部分日志的打印和處理需求。

  • zap

zap 是 Uber 開源的一款高性能日志庫,它支持多種日志級別和輸出方式,包括console、json、file等等。zap 的性能比較優(yōu)秀,它使用了 Zero Allocation 的設(shè)計理念,在不影響性能的情況下盡量避免內(nèi)存分配。

各大公司在選擇日志組件時,使用 zap 居多。

  • zerolog

zerolog 是一款輕量級的日志庫,具有非常好的性能和可擴(kuò)展性。它支持多種日志級別、輸出格式和輸出方式,包括 console、json、file 等等。zerolog 的設(shè)計理念是簡單、易用、高性能,代碼量也比較少。

總的來說,以上幾個日志庫都具有不同的優(yōu)點和適用場景,可以根據(jù)具體需求選擇使用。

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

相關(guān)文章

  • Go語言實現(xiàn)二維數(shù)組的2種遍歷方式以及案例詳解

    Go語言實現(xiàn)二維數(shù)組的2種遍歷方式以及案例詳解

    這篇文章主要介紹了Go語言實現(xiàn)二維數(shù)組的2種遍歷方式以及案例詳解,圖文代碼聲情并茂,有感興趣的可以學(xué)習(xí)下
    2021-03-03
  • go配置管理框架viper常用操作

    go配置管理框架viper常用操作

    這篇文章主要介紹了go配置管理框架viper常用操作,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-04-04
  • Golang設(shè)計模式之外觀模式的實現(xiàn)

    Golang設(shè)計模式之外觀模式的實現(xiàn)

    這篇文章主要介紹了Golang設(shè)計模式之外觀模式的實現(xiàn),外觀模式是一種常用的設(shè)計模式之一,是一種結(jié)構(gòu)型設(shè)計模式,它提供了一個簡單的接口來訪問復(fù)雜系統(tǒng)的各種功能,從而降低了系統(tǒng)的復(fù)雜度,需要詳細(xì)了解可以參考下文
    2023-05-05
  • go語言中GoMock的實現(xiàn)

    go語言中GoMock的實現(xiàn)

    GoMock是一個Go框架,它與內(nèi)置的測試包整合得很好,并在單元測試時提供了靈活性,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • Go語言面試題之select和channel的用法

    Go語言面試題之select和channel的用法

    金九銀十面試季到了(PS:貌似今年一年都是面試季),就業(yè)環(huán)境很差,導(dǎo)致從業(yè)人員不得不卷。本文將重點講解一下Go面試進(jìn)階知識點之select和channel,需要的可以參考一下
    2022-09-09
  • go語言beego框架jwt身份認(rèn)證實現(xiàn)示例

    go語言beego框架jwt身份認(rèn)證實現(xiàn)示例

    這篇文章主要為大家介紹了go語言beego框架jwt身份認(rèn)證實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Golang 負(fù)載均衡算法實現(xiàn)示例

    Golang 負(fù)載均衡算法實現(xiàn)示例

    在Go語言中,負(fù)載均衡算法通常由代理、反向代理或者應(yīng)用層負(fù)載均衡器來實現(xiàn),在這些實現(xiàn)中,有一些經(jīng)典的負(fù)載均衡算法,跟隨本文來一一探究
    2024-01-01
  • 淺談Golang的Work Stealing機(jī)制

    淺談Golang的Work Stealing機(jī)制

    Go的運(yùn)行時系統(tǒng)使用了一種名為Work Stealing的調(diào)度策略來分配Goroutine到可用線程上執(zhí)行,本文主要介紹了淺談Golang的Work Stealing機(jī)制,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實例詳解

    Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實例詳解

    這篇文章主要為大家介紹了Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Go語言常見錯誤之濫用getters/setters誤區(qū)實例探究

    Go語言常見錯誤之濫用getters/setters誤區(qū)實例探究

    在Go語言編程中,恰如其分地使用getters和setters是至關(guān)重要的,過度和不適當(dāng)?shù)厥褂盟鼈兛赡軐?dǎo)致代碼冗余、可讀性差和封裝不當(dāng),在本文中,我們將深入探討如何識別濫用getter和setter的情況,以及如何采取最佳實踐來避免這些常見的Go錯誤
    2024-01-01

最新評論

行唐县| 辽源市| 稷山县| 秦皇岛市| 武川县| 邵武市| 宜兰县| 宣化县| 浠水县| 牡丹江市| 建宁县| 灵山县| 丰顺县| 平江县| 庐江县| 磐石市| 彭水| 五原县| 贡嘎县| 苏尼特右旗| 海门市| 武乡县| 丽江市| 绵竹市| 永嘉县| 香格里拉县| 乌什县| 吉林省| 京山县| 轮台县| 陈巴尔虎旗| 那曲县| 呼图壁县| 锡林郭勒盟| 三门县| 九龙坡区| 崇礼县| 行唐县| 章丘市| 广丰县| 吉林省|