在CentOS系统中,Golang应用程序的日志是排查问题的核心线索。通过合理配置日志、分析日志内容并结合系统工具,可以快速定位和解决应用或系统层面的问题。以下是具体步骤和方法:
首先,确保Golang应用输出结构化、可追溯的日志,便于后续分析。常用以下两种方式:
log包:适合简单需求,可设置日志输出到文件并添加时间、文件名等上下文。package main
import (
"log"
"os"
)
func init() {
logFile, err := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
log.Fatalf("Failed to open log file: %v", err)
}
log.SetOutput(logFile) // 输出到文件
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) // 添加时间、文件名和行号
}
func main() {
log.Println("Application started") // 记录常规信息
}
package main
import (
"github.com/sirupsen/logrus"
"os"
)
func main() {
logger := logrus.New()
logger.SetFormatter(&logrus.JSONFormatter{}) // 结构化输出
logger.SetOutput(os.Stdout)
logger.SetLevel(logrus.DebugLevel) // 设置日志级别
logger.WithFields(logrus.Fields{
"animal": "walrus",
"size": 10,
}).Info("A group of walrus emerges from the ocean") // 带上下文的日志
}
package main
import (
"go.uber.org/zap"
)
func main() {
logger, _ := zap.NewProduction() // 生产环境配置
defer logger.Sync()
logger.Info("logger construction succeeded",
zap.String("key", "value"), // 结构化字段
)
}
/var/log/目录(如/var/log/myapp.log),便于统一管理。logrotate工具避免日志文件过大,配置示例(/etc/logrotate.d/myapp):/path/to/myapp.log {
daily # 每天轮转
rotate 7 # 保留7天
compress # 压缩旧日志
missingok # 文件不存在不报错
notifempty # 空文件不轮转
create 0644 root root # 新日志文件权限
}
运行sudo logrotate -f /etc/logrotate.d/myapp手动触发轮转。使用CentOS命令行工具快速定位问题:
tail -f /var/log/myapp.log(实时输出最新日志)。grep "ERROR" /var/log/myapp.log(提取包含“ERROR”的行)。grep "ERROR" /var/log/myapp.log | wc -l(统计错误日志条数)。awk '/2025-10-30 10:00:00/,/2025-10-30 11:00:00/' /var/log/myapp.log(查看特定时间段的日志)。journalctl查看系统日志,关联应用问题(如服务崩溃、权限问题)。journalctl -u myapp.service -f # 查看指定服务的实时日志
journalctl -p err # 查看系统错误日志
journalctl -u mysqld查看MySQL日志)。goaccess /var/log/httpd/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html
若日志信息不足,可使用调试工具深入分析:
go install github.com/go-delve/delve/cmd/dlv@latest
dlv debug /path/to/application # 启动调试会话
(dlv) break main.main # 设置断点
(dlv) continue # 继续执行
go-torch生成火焰图。go get -u github.com/uber/go-torch
go-torch -d 30 -f ./torch.svg # 生成30秒的火焰图
通过监控工具及时发现异常:
yum install logwatch
logwatch --output mail --mailto admin@example.com # 发送邮件报告
通过以上步骤,可系统性地利用Golang日志排查CentOS问题,从日志收集、分析到问题定位形成闭环,提升运维效率。