go中l(wèi)og包的實現(xiàn)示例
log 包是 Go 語言標準庫中的日志庫,用于記錄程序的運行信息。它提供了簡單的日志記錄功能,適合開發(fā)階段的調(diào)試和生產(chǎn)環(huán)境的基本日志輸出需求。
log 包的核心功能
- 輸出日志信息到標準輸出或文件。
- 提供多種日志級別(通過擴展,如 log.Logger)。
- 支持自定義日志前綴和時間戳格式。
- 易于集成到更復雜的日志系統(tǒng)中。
log 包的常用函數(shù)
- log.Print:輸出日志信息(類似 fmt.Print)。
- log.Println:輸出日志信息并在末尾添加換行符(類似 fmt.Println)。
- log.Printf:按指定格式輸出日志信息(類似 fmt.Printf)。
- log.Fatal:輸出日志信息后調(diào)用 os.Exit(1) 終止程序。
- log.Panic:輸出日志信息后引發(fā) panic。
示例代碼:
package main
import "log"
func main() {
log.Print("這是一條普通日志")
log.Println("這是一條帶換行的日志")
log.Printf("這是一條格式化日志:變量值為 %d", 42)
// Fatal 和 Panic 示例(請注釋其中之一以避免程序中斷)
// log.Fatal("這是一條致命日志,程序?qū)⒃谌罩竞笸顺?)
// log.Panic("這是一條會引發(fā) panic 的日志")
}
輸出示例:
2024/12/09 12:00:00 這是一條普通日志
2024/12/09 12:00:00 這是一條帶換行的日志
2024/12/09 12:00:00 這是一條格式化日志:變量值為 42
自定義日志功能
log 包允許創(chuàng)建自定義的 Logger 實例,可以指定輸出目標、前綴和日志標志。
- log.New:創(chuàng)建新的 Logger 實例。
- log.Flags:設(shè)置日志格式標志(如日期、時間、微秒、文件行號)。
- log.SetOutput:更改日志輸出位置(如文件)。
示例代碼:自定義日志前綴和輸出文件
package main
import (
"log"
"os"
)
func main() {
// 打開日志文件
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()
// 創(chuàng)建自定義 Logger
logger := log.New(file, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
// 記錄日志
logger.Println("應用程序啟動")
logger.Printf("當前狀態(tài):%s", "運行中")
// 錯誤日志示例
logger.SetPrefix("ERROR: ")
logger.Println("發(fā)生錯誤,無法連接數(shù)據(jù)庫")
}
輸出日志文件內(nèi)容:
INFO: 2024/12/09 12:00:00 main.go:20: 應用程序啟動 INFO: 2024/12/09 12:00:00 main.go:21: 當前狀態(tài):運行中 ERROR: 2024/12/09 12:00:00 main.go:24: 發(fā)生錯誤,無法連接數(shù)據(jù)庫
企業(yè)級使用案例
在企業(yè)應用中,log 包通常與其他工具(如多模塊日志記錄、遠程日志收集等)結(jié)合使用。以下示例展示了一個基于 log 包的多級日志記錄器:
示例代碼:多級日志記錄
package main
import (
"log"
"os"
)
// Logger 定義多級日志記錄器
type Logger struct {
Info *log.Logger
Error *log.Logger
}
func NewLogger(infoFile, errorFile string) (*Logger, error) {
// 打開日志文件
infoLog, err := os.OpenFile(infoFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
return nil, err
}
errorLog, err := os.OpenFile(errorFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
infoLog.Close()
return nil, err
}
return &Logger{
Info: log.New(infoLog, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile),
Error: log.New(errorLog, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile),
}, nil
}
func main() {
logger, err := NewLogger("info.log", "error.log")
if err != nil {
log.Fatalf("無法創(chuàng)建日志記錄器: %v", err)
}
logger.Info.Println("服務啟動成功")
logger.Error.Println("數(shù)據(jù)庫連接失?。撼瑫r")
}
輸出示例:
info.log文件:
INFO: 2024/12/09 12:00:00 main.go:30: 服務啟動成功
error.log文件:
ERROR: 2024/12/09 12:00:00 main.go:31: 數(shù)據(jù)庫連接失?。撼瑫r
總結(jié)
- log 包提供了基礎(chǔ)的日志記錄功能,適合簡單的日志需求。
- 通過 log.New 和 log.SetOutput,可以實現(xiàn)更靈活的日志記錄方式。
- 在企業(yè)中,通常需要將 log 包與日志管理系統(tǒng)(如 ELK、Fluentd)結(jié)合使用,實現(xiàn)更高級的日志處理。
代碼案例
package _case
import (
"log"
"os"
)
func init() {
log.SetFlags(log.Ldate | log.Ltime | log.Llongfile)
log.SetOutput(os.Stderr)
}
func LogCase() {
//log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
log.Println("帶有日期、時間和文件信息的日志:")
a, b := -1, -11
_, err := sum(a, b)
if err != nil {
log.Println(err)
log.Fatal(err) // fatal 打印日志后會導致程序的退出
}
}
到此這篇關(guān)于go中l(wèi)og包的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)go log包 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go?中?time.After?可能導致的內(nèi)存泄露問題解析
這篇文章主要介紹了Go?中?time.After?可能導致的內(nèi)存泄露,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05
golang定時器Timer的用法和實現(xiàn)原理解析
這篇文章主要介紹了golang定時器Ticker,本文主要來看一下Timer的用法和實現(xiàn)原理,需要的朋友可以參考以下內(nèi)容2023-04-04

