使用標(biāo)準(zhǔn)庫log包可快速搭建Go日志系統(tǒng),支持前綴、時間戳和文件行號輸出;通過SetOutput將日志寫入文件便于持久化;借助log.New實現(xiàn)Info、Warn、Error分級管理;結(jié)合lumberjack實現(xiàn)日志輪轉(zhuǎn),提升生產(chǎn)環(huán)境可用性與可維護(hù)性。
在Go語言項目中,一個基礎(chǔ)但可靠的日志系統(tǒng)是必不可少的。它能幫助開發(fā)者追蹤程序運行狀態(tài)、排查錯誤和監(jiān)控服務(wù)健康。Golang標(biāo)準(zhǔn)庫中的 log 包已經(jīng)提供了基本的日志功能,結(jié)合一些簡單設(shè)計就能快速搭建出實用的日志系統(tǒng)。
Go 的 log 包開箱即用,適合中小型項目或?qū)W習(xí)用途。你可以用它輸出帶時間戳的信息、警告和錯誤。
示例代碼:
package main import ( "log" "os" ) func main() { // 設(shè)置日志前綴和標(biāo)志(包含文件名和行號) log.SetPrefix("[APP] ") log.SetFlags(log.LstdFlags | log.Lshortfile) log.Println("應(yīng)用啟動") log.Printf("處理用戶ID: %d", 1001) // 模擬錯誤 if err := someOperation(); err != nil { log.Printf("操作失敗: %v", err) } } func someOperation() error { return os.ErrNotExist }
說明:
SetPrefix 添加日志前綴便于識別來源;
LstdFlags 包含日期和時間;
Lshortfile 顯示調(diào)用日志的文件名和行號,對調(diào)試很有幫助。
生產(chǎn)環(huán)境中通常需要把日志保存到文件以便后續(xù)分析。只需將 log.SetOutput() 指向一個文件即可。
立即學(xué)習(xí)“go語言免費學(xué)習(xí)筆記(深入)”;
示例:
file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { log.Fatalf("無法打開日志文件: %v", err) } defer file.Close() log.SetOutput(file) log.Println("這條日志會寫入文件")
這樣所有通過 log.Print/Printf/Println 輸出的內(nèi)容都會追加到 app.log 中。
標(biāo)準(zhǔn)庫沒有原生支持日志級別,但可以通過自定義 logger 實現(xiàn)簡易分級。
做法:創(chuàng)建不同前綴的 logger 實例。
infoLog := log.New(file, "[INFO] ", log.LstdFlags|log.Lshortfile) warnLog := log.New(file, "[WARN] ", log.LstdFlags|log.Lshortfile) errorLog := log.New(file, "[ERROR] ", log.LstdFlags|log.Lshortfile) infoLog.Println("用戶登錄成功") warnLog.Println("配置項缺失,使用默認(rèn)值") errorLog.Printf("數(shù)據(jù)庫連接失敗: %v", err)
這種方式結(jié)構(gòu)清晰,便于后期用腳本或工具按級別過濾日志。
對于高并發(fā)或大型服務(wù),標(biāo)準(zhǔn)庫 log 可能滿足不了需求。可以考慮以下方向升級:
例如結(jié)合 lumberjack 切割日志:
import "gopkg.in/natefinch/lumberjack.v2" log.SetOutput(&lumberjack.Logger{ Filename: "logs/app.log", MaxSize: 10, // MB MaxBackups: 5, MaxAge: 7, // 天 Compress: true, })
基本上就這些。用好標(biāo)準(zhǔn)庫的 log 包,再根據(jù)實際需求逐步增強(qiáng),就能構(gòu)建出穩(wěn)定的基礎(chǔ)日志系統(tǒng)。不復(fù)雜但容易忽略細(xì)節(jié),比如時間戳、文件位置、錯誤上下文等,都值得認(rèn)真設(shè)計。
以上就是Golang如何構(gòu)建基礎(chǔ)日志系統(tǒng)的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進(jìn)程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號