Golang日志在Debian上的調試技巧
log.SetFlags(log.LstdFlags | log.Lshortfile)可輸出帶時間戳、文件名及行號的日志,快速定位代碼位置;log.SetOutput(os.Stdout)將日志輸出到控制臺,便于實時查看。zap(高性能)或logrus(功能豐富)。例如,zap通過zap.NewProduction()創建生產級logger,支持JSON格式輸出和日志級別控制;logrus通過logrus.SetLevel(logrus.DebugLevel)開啟調試模式,配合logrus.WithFields添加上下文信息(如請求ID、用戶ID),提升日志可讀性。Debug(輸出詳細信息),生產階段設為Info或Error(減少日志量)。例如,使用logrus時,可通過環境變量LOG_LEVEL控制級別:LOG_LEVEL=debug go run main.go,或在代碼中讀取環境變量設置級別。zap的JSONEncoder或logrus的JSONFormatter),便于后續用日志分析工具(如ELK、Graylog)檢索和過濾。例如,zap的配置中設置config.Encoding = "json",輸出的日志包含timestamp、level、message等字段,更適合結構化分析。delve(sudo apt-get install delve),通過dlv debug your-program.go啟動調試會話??稍O置斷點(break main.go:10)、單步執行(next)、查看變量值(print variable),觀察日志輸出與程序執行的關聯,快速定位日志未輸出或內容錯誤的原因。journald)。例如,使用logrus的lfshook庫將日志寫入/var/log/syslog,或通過syslog包直接發送。使用journalctl -u your-service-name查看服務日志,結合系統日志排查跨組件的調試問題。lumberjack庫實現日志輪轉,限制單個日志文件大?。ㄈ?code>MaxSize: 100MB)、保留數量(如MaxBackups: 7)及保留天數(如MaxAge: 30),并啟用壓縮(Compress: true)。例如,log.SetOutput(&lumberjack.Logger{Filename: "app.log", MaxSize: 100, MaxBackups: 7, MaxAge: 30, Compress: true}),防止日志文件占滿磁盤空間,影響系統運行。strace -p <pid>跟蹤Golang應用的系統調用,查看是否有文件打開失敗、網絡連接超報等問題,輔助定位日志背后的系統級錯誤。例如,若日志中提示“無法寫入文件”,通過strace可檢查文件權限或磁盤空間是否充足。pprof工具分析日志相關的性能瓶頸(如日志寫入過慢)。在代碼中導入net/http/pprof,啟動HTTP服務器(go func() { log.Println(http.ListenAndServe("localhost:6060", nil)) }()),通過go tool pprof http://localhost:6060/debug/pprof/profile生成性能報告,查看日志寫入占用的CPU或內存資源,優化日志配置(如開啟異步日志)。