在本文中,我將分享如何在不重新啟動應用程式的情況下更改應用程式的日誌等級。
日誌等級通常被認為是按重要性排序:在開發中開啟「不重要」等級(通知、偵錯等),但在開發中僅啟用「最重要」等級(警告、錯誤等)生產環境, CPU 時間和磁碟空間等資源非常寶貴。
但是,如果您的應用程式運行在ERROR 級別,並且您開始面臨許多問題,但您無法從ERROR 級別日誌中找出問題所在,那麼透過重新部署應用程式來更改日誌級別將花費大量時間和資源。
此外,在生產中以 INFO 或 DEBUG 等級運行應用程式將產生大量日誌,這些日誌可能會壓垮日誌系統,導致 I/O 操作和資源消耗增加。
為了解決這些問題,GoFr - 終極 Golang 框架提供了一種安全的方法來更改日誌級別,而無需重新啟動應用程式。
要更改日誌級別,任何 GoFr 應用程式都需要以下配置:
REMOTE_LOG_URL=<URL to user remote log level endpoint> (e.g., https://log-service.com/log-levels?id=1)
GoFr 預設每 15 秒獲取一次提供的端點以獲取最新的日誌級別,可以透過添加以下配置來增加或減少此間隔。
REMOTE_LOG_FETCH_INTERVAL=<Interval in seconds> (default: 15)
GoFr 要求 URL 的回應採用以下格式,並帶有兩個必填欄位:
{ "data": { "serviceName": "test-service", "logLevel": "DEBUG" } }
讓我們建立日誌等級服務,它將為我們的應用程式提供日誌等級。
我將使用 GoFr 建立服務,請參閱文件以了解更多資訊。
我們將使用 MySQL 作為資料庫,若要新增 MySQL,請在 configs 目錄中的 .env 檔案中新增以下設定。
DB_HOST=localhost DB_USER=root DB_PASSWORD=password DB_NAME=log-level DB_PORT=2001 DB_DIALECT=mysql
要執行 MySQL docker 容器,請執行以下指令
docker run --name gofr-logger -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=log-level -p 2001:3306 -d mysql:8.0.30
讓我們新增帶有遷移的 main.go 檔案來建立表,我們將使用 AddRESTHandler 功能來註冊路由。
main.go
package main import ( "gofr.dev/pkg/gofr" "gofr.dev/pkg/gofr/migration" ) const createTable = `CREATE TABLE level ( id INT PRIMARY KEY, service_name VARCHAR(255) NOT NULL, log_level VARCHAR(50) NOT NULL ); ` func createTableLevel() migration.Migrate { return migration.Migrate{ UP: func(d migration.Datasource) error { _, err := d.SQL.Exec(createTable) if err != nil { return err } return nil }, } } type Level struct { ID int `json:"id"` ServiceName string `json:"serviceName"` LogLevel string `json:"logLevel"` } func (u *Level) RestPath() string { return "level" } func main() { app := gofr.New() app.Migrate(map[int64]migration.Migrate{1: createTableLevel()}) err := app.AddRESTHandlers(&Level{}) if err != nil { app.Logger().Fatalf("Failed to register routes for level struct: %v", err) } app.Run() }
運行日誌服務後我們會看到以下日誌:
我們已註冊所有 REST 路線。
要建立服務,請傳送以下請求:
curl --location 'localhost:8000/level' \ --header 'Content-Type: application/json' \ --data '{ "id":1, "logLevel":"INFO", "serviceName":"gofr-app" }'
要更新日誌級別,請發送以下請求:
curl --location --request PUT 'localhost:8000/level/1' \ --header 'Content-Type: application/json' \ --data '{ "id":1, "logLevel":"DEBUG", "serviceName":"gofr-app" }'
要取得日誌級別,請發送以下請求:
curl --location 'localhost:8000/level/1'
相同的 URL 將用於我們的應用程式的配置中,其日誌等級必須遠端變更。
透過使用 GoFr 遠端日誌等級來變更功能,您將獲得以下好處:
輕鬆調整:
隨時修改日誌級別,無需重新啟動應用程式。這在故障排除期間特別有用。
增強可見度:
輕鬆切換到更詳細的日誌等級(例如 DEBUG)以更深入地了解特定問題,然後切換回不太詳細的等級(例如 INFO)以進行常規操作。
效能改善:
產生大量日誌會使日誌系統不堪重負,導致 I/O 操作和資源消耗增加,更改為警告或錯誤等級可減少日誌數量,增強效能,並降低雲端成本。
給 ⭐star 支持 GoFr: https://github.com/gofr-dev/gofr
此外,您還可以訪問免費公共端點來匯出和查看應用程式的追蹤@tracer.gofr.dev。
要啟用它,請在您的 .env 檔案中新增以下配置
TRACE_EXPORTER=gofr
其他好處:
如果您在開發或撰寫文章方面為 GOFR 做出了貢獻。您可以填寫 GitHub 自述文件(底部)上的表格來獲得免費的贈品(T 卹、貼紙)。
以上是使用 Golang 和 GoFr 更改運行時日誌級別的詳細內容。更多資訊請關注PHP中文網其他相關文章!