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启动调试会话。可设置断点(break main.go:10)、单步执行(next)、查看变量值(print variable),观察日志输出与程序执行的关联,快速定位日志未输出或内容错误的原因。journald)。例如,使用logrus的lfshook库将日志写入/var/log/syslog,或通过syslog包直接发送。使用journalctl -u your-service-name查看服务日志,结合系统日志排查跨组件的调试问题。lumberjack库实现日志轮转,限制单个日志文件大小(如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或内存资源,优化日志配置(如开启异步日志)。