Gin Web 層集成 Viper 配置文件和 Zap 日志文件指南(下)

在微服務架構中,Gin 常被用作 Web 層框架,而 Viper 用于管理配置文件,Zap 則提供高性能的日志記錄功能。下面將詳細介紹如何在 Gin Web 層集成 Viper 配置文件和 Zap 日志文件。

1. 項目概述

假設我們有一個基于 Go 語言的微服務項目,其中 Gin 負責處理 HTTP 請求,Viper 管理項目的配置信息,Zap 記錄項目運行過程中的日志。我們將參考已有的代碼結構和功能,逐步完成集成。

2. 集成 Viper 配置文件

2.1 安裝 Viper

首先,確保你已經安裝了 Viper 庫。如果沒有安裝,可以使用以下命令進行安裝:

go get github.com/spf13/viper

2.2 初始化 Viper

在項目中創建一個初始化函數,用于讀取配置文件。以下是一個示例代碼:

package initializeimport ("fmt""github.com/spf13/viper""go.uber.org/zap"
)func InitConfig() {// 設置配置文件的名稱和類型viper.SetConfigName("config")viper.SetConfigType("yaml")// 添加配置文件的搜索路徑viper.AddConfigPath(".")// 讀取配置文件if err := viper.ReadInConfig(); err != nil {if _, ok := err.(viper.ConfigFileNotFoundError); ok {zap.S().Fatalf("配置文件未找到: %v", err)} else {zap.S().Fatalf("讀取配置文件出錯: %v", err)}}// 可以在這里進行一些配置信息的初始化操作fmt.Println("配置文件加載成功")
}

2.3 在主函數中調用初始化函數

在項目的主函數中調用?InitConfig?函數,確保配置文件在項目啟動時被正確加載。

package mainimport ("mxshop-api/user-web/initialize"
)func main() {// 初始化配置文件initialize.InitConfig()// 其他初始化操作...
}

3. 集成 Zap 日志文件

3.1 安裝 Zap

確保你已經安裝了 Zap 庫。如果沒有安裝,可以使用以下命令進行安裝:

go get go.uber.org/zap

3.2 初始化 Zap

創建一個初始化函數,用于配置和初始化 Zap 日志記錄器。以下是一個示例代碼:

package initializeimport ("go.uber.org/zap""go.uber.org/zap/zapcore""gopkg.in/natefinch/lumberjack.v2"
)func InitLogger() {// 配置日志輸出文件writeSyncer := getLogWriter()// 配置日志編碼器encoder := getEncoder()// 創建一個核心,用于處理日志記錄core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)// 創建一個新的 Zap 日志記錄器logger := zap.New(core, zap.AddCaller())// 將全局的 Zap 日志記錄器替換為我們創建的日志記錄器zap.ReplaceGlobals(logger)
}func getEncoder() zapcore.Encoder {// 創建一個 JSON 編碼器配置encoderConfig := zap.NewProductionEncoderConfig()// 設置時間格式encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder// 設置級別編碼格式encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder// 返回一個 JSON 編碼器return zapcore.NewJSONEncoder(encoderConfig)
}func getLogWriter() zapcore.WriteSyncer {// 配置日志文件的滾動設置lumberJackLogger := &lumberjack.Logger{Filename:   "./logs/app.log",MaxSize:    10,MaxBackups: 5,MaxAge:     30,Compress:   false,}// 返回一個可以寫入文件的同步器return zapcore.AddSync(lumberJackLogger)
}

3.3 在主函數中調用初始化函數

在項目的主函數中調用?InitLogger?函數,確保 Zap 日志記錄器在項目啟動時被正確初始化。

package mainimport ("mxshop-api/user-web/initialize"
)func main() {// 初始化日志記錄器initialize.InitLogger()// 初始化配置文件initialize.InitConfig()// 其他初始化操作...
}

4. 在 Gin 中使用 Viper 和 Zap

在 Gin 路由處理函數中,可以使用 Viper 獲取配置信息,使用 Zap 記錄日志。以下是一個示例代碼:

package mainimport ("github.com/gin-gonic/gin""go.uber.org/zap""mxshop-api/user-web/initialize"
)func main() {// 初始化日志記錄器initialize.InitLogger()// 初始化配置文件initialize.InitConfig()// 創建一個默認的 Gin 引擎r := gin.Default()// 定義一個路由處理函數r.GET("/", func(c *gin.Context) {// 使用 Zap 記錄日志zap.S().Info("接收到一個 GET 請求")// 使用 Viper 獲取配置信息configValue := initialize.viper.GetString("some_config_key")c.JSON(200, gin.H{"message": "Hello, World!","config":  configValue,})})// 啟動 Gin 服務器if err := r.Run(":8080"); err != nil {zap.S().Fatalf("啟動服務器失敗: %v", err)}
}

5. 總結

通過以上步驟,我們成功地在 Gin Web 層集成了 Viper 配置文件和 Zap 日志文件。Viper 幫助我們管理項目的配置信息,Zap 提供了高性能的日志記錄功能,使得項目的配置管理和日志記錄更加方便和高效。

承接微服務注冊中心詳解

如果這篇文章對大家有幫助可以點贊關注,你的支持就是我的動力😊!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90316.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90316.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90316.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IoTDB:專為物聯網場景設計的高性能時序數據庫

什么是IoTDB?IoTDB(Internet of Things Database)是一款開源的時序數據庫管理系統,專為物聯網(IoT)場景設計,由清華大學軟件學院團隊自研,天謀科技團隊負責維護。它針對物聯網數據的…

[netty5: MessageAggregator HttpObjectAggregator]-源碼解析

在閱讀這篇文章前,推薦先閱讀 [netty5: ByteToMessageCodec & MessageToByteEncoder & ByteToMessageDecoder]-源碼分析[netty5: HttpObject]-源碼解析 100-continue 100-continue 是 HTTP/1.1 協議中的一種機制,用于客戶端在發送大體積請求體…

前端學習1--行內元素 vs 塊級元素(基礎概念+案例實操)

一、內外邊距學習:(1)簡單理解:padding為內邊距。padding不會影響元素的位置,只會調整元素的內容(文字)與邊框之間的間距。margin為外邊距。margin會影響元素在流式布局中的位置,改變…

Express + mysql2 + jwt 實現簡單的登錄鑒權

目前項目中使用Express 實現簡單API功能,需要提供一套登錄鑒權方案。這邊是API側實現 相關路由的登錄鑒權。大體思路:就是,登錄接口中通過jwt加密 token返回前端,前端其他接口把加密好的放入請求頭Authorization中。中間件通過請求…

ReAct (Reason and Act) OR 強化學習(Reinforcement Learning, RL)

這個問題觸及了現代AI智能體(Agent)構建的兩種核心思想。 簡單來說,ReAct 是一種“調用專家”的模式,而強化學習 (RL) 是一種“從零試錯”的模式。 為了讓你更清晰地理解,我們從一個生動的比喻開始,然后進行…

iTwinjs 4.10-4.11 更新

撤銷更改 目前,撤銷一個有缺陷的變更集的唯一方法是從 iModel Hub 中移除它,這可能會導致許多副作用(無法撤銷)。一個更好的方法是在時間線中撤銷變更集,并將其作為新的變更集引入。盡管這種方法仍然具有侵入性&#…

【CSS-15】深入理解CSS transition-duration:掌握過渡動畫的時長控制

在現代網頁設計中,平滑的過渡效果是提升用戶體驗的關鍵因素之一。CSS transitions 為我們提供了一種簡單而強大的方式來實現元素在不同狀態之間的平滑過渡,而 transition-duration 屬性則是控制這些過渡效果時長的核心工具。本文將全面探討 transition-d…

mysql-筆記

1. 安裝mysql # 使用brew安裝 brew install mysql# 查看是否安裝成功 mysql -V 相關文檔: mac:macOS下MySQL 8.0 安裝與配置教程 - KenTalk - 博客園 Linux安裝:linux安裝mysql客戶端_linux mysql 客戶端-CSDN博客 2. 啟動mysql 每次使…

Spring Boot啟動優化7板斧(延遲初始化、組件掃描精準打擊、JVM參數調優):砍掉70%啟動時間的魔鬼實踐

Spring Boot啟動優化7板斧:砍掉70%啟動時間的魔鬼實踐1. 延遲初始化:按需加載的智慧2. 組件掃描精準打擊:告別無差別掃描3. JVM參數調優:啟動加速的隱藏開關4. 自動配置瘦身:砍掉Spring Boot的"贅肉"5. 類加…

從0開始學習計算機視覺--Day08--卷積神經網絡

之前我們提到,神經網絡是通過全連接層對輸入做降維處理,將輸入的向量通過矩陣和激活函數進行降維,在神經元上輸出激活值。而卷積神經網絡中,用卷積層代替了全連接層。 不同的是,這里的輸入不再需要降維,而…

解決阿里云ubuntu內存溢出導致vps死機無法訪問 - 永久性增加ubuntu的swap空間 - 阿里云Linux實例內存溢出(OOM)問題修復方案

效果圖報錯通過對實例當前截屏的分析發現,實例因 Linux實例內存空間不足,導致操作系統出現內存溢出(OOM) 無法正常啟動。請您根據 Code:1684829582,在文檔中查詢該問題對應的修復方案,并通過VNC…

Serverless JManus: 企業生產級通用智能體運行時

作者:叢霄、陸龜 概述:本文介紹如何使用 JManus 框架構建通用智能體應用,部署并運行在 Serverless 運行時,構建企業級高可用智能體應用的實踐經驗。基于阿里云 Serverless 應用引擎SAE 運行穩定高可用的智能體應用, 基…

MySQL的數據目錄

導讀:根據前面的所學知識,我們知道了InnoDB存儲引擎存儲數據的數據結構、存儲過程,而被組織好的數據則被存儲在操作系統的磁盤上,當我們在對表數據進行增刪改查時,其實就是InnoDB存儲引擎與磁盤的交互。此外&#xff0…

Web前端開發: :has功能性偽類選擇器

:has功能性偽類選擇器::has() 是 CSS 中的一個功能性偽類選擇器,它允許開發者根據元素的后代元素、兄弟元素或后續元素的存在或狀態來選擇目標元素。它本質上是一個“父選擇器”或“關系選擇器”,解決了 CSS 長期以來無法根據子元素反向選擇父元素的痛點…

深度學習8(梯度下降算法改進2)

目錄 RMSProp 算法 Adam算法 學習率衰減 RMSProp 算法 RMSProp(Root Mean Square Prop)算法是在對梯度進行指數加權平均的基礎上,引入平方和平方根。 其中e是一個非常小的數,防止分母太小導致不穩定,當 dw 或 db 較大時,(du)2,(db)2會較大&…

JAVA面試寶典 -《網絡編程核心:NIO 與 Netty 線程模型詳解》

網絡編程核心:NIO 與 Netty 線程模型詳解 文章目錄網絡編程核心:NIO 與 Netty 線程模型詳解一、傳統 BIO 模型:排隊買奶茶的阻塞模式 🥤1.1 專業解釋1.2 簡單點比喻1.3 簡單示例二、NIO 模型:智能叫號餐廳系統 &#x…

藍橋杯 第十六屆(2025)真題思路復盤解析

本文以洛谷平臺所提供的題目描述及評測數據為基礎進行講解。 前言:這是本人的藍橋杯試卷,大概排省一前40%的位置,實際上這屆題目偏難,我沒有做出太多的有效得分。我把當時的思路和現在學習的思路都復盤進來,希望給大家…

蘭頓螞蟻路徑lua測試

蘭頓螞蟻local p0 local x,y,z0,7,0 local function add() local result,id Block:getBlockID(x,y,z)if id1 thenBlock:destroyBlock(x,y,z,false) pp90 elseBlock:setBlockAll(x,y,z,1,0) pp-90 end x,zx-math.floor(0.5math.sin(math.rad(p))),z-math.floor(0.5math.cos(m…

【Axure RP】什么是Axure?Axure可以用來做什么?

【Axure RP】什么是Axure?Axure可以用來做什么? 目錄【Axure RP】什么是Axure?Axure可以用來做什么?Axure RP簡介Axure RP 是什么?Axure RP核心功能和應用場景Axure RP簡介 Axure RP 是什么? Axure RP 是一…

Java項目:基于SSM框架實現的暢玩北海旅游網站管理系統【ssm+B/S架構+源碼+數據庫+畢業論文】

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術,讓傳統數據信息的管理升級為軟件存儲,歸納,集中處理數據信息的管理方式。本暢玩北海旅游網站就是在這樣的大環境下誕生,其可以幫助管理者在短時間內處理完畢龐大的數據信息…