在Debian系統上使用Golang進行故障排查時,日志記錄是一個關鍵的步驟。以下是一些有效的日志記錄和排查技巧:
uber-go/zap
或 go.uber.org/zap
等高性能日志庫。zap.NewAtomicLevelAt(zap.ErrorLevel)
只記錄錯誤信息。zap.New(zap.Config{ EncoderConfig: zap.NewEncoderConfig(zap.BatchedEncoderConfig(time.Second)), OutputPaths: []string{"stdout", "./logs/application.log"}, })
。var logger *zap.Logger
func init() {
logger, _ = zap.NewProduction()
}
func main() {
logger.Info("Message")
go func() {
if err := task(); err != nil {
logger.Printf("Task failed with error: %v", err)
}
}()
}
使用 journalctl
命令:journalctl
是systemd的日志服務工具,可以顯示系統日志的實時滾動記錄。常用命令包括:
journalctl
:顯示所有日志journalctl -b
:顯示自系統啟動以來的日志journalctl -f
:實時顯示新日志journalctl -u 服務名
:查看特定服務的日志journalctl -e "事件描述"
:查看包含特定事件的日志。查看日志文件:Debian系統中的日志文件通常位于 /var/log
目錄下,如 syslog
、auth.log
、kern.log
等??梢允褂?cat
、less
、grep
等命令查看和分析這些日志文件。
使用文本編輯器查看日志:可以使用 nano
、vim
等文本編輯器打開并查看日志文件,例如:
sudo nano /var/log/syslog
zap
記錄日志以下是一個使用 zap
記錄日志的簡單示例:
package main
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
func main() {
logger := zap.NewProduction()
defer logger.Sync() // flushes buffer, if any
core := zapcore.NewCore(
zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
zapcore.AddSync(&lumberjack.Logger{
Filename: "./logs/app.log",
MaxSize: 10, // megabytes
MaxBackups: 3,
MaxAge: 28, // days
Compress: true, // disabled by default
}),
zap.InfoLevel,
)
logger.With(zap.String("溫度", "25°C")).Info("啟動應用")
}
通過這些方法和工具,可以有效地在Debian系統上使用Golang進行日志記錄和故障排查。