Golang应用的日志可能输出到系统日志(journalctl)、文件或标准输出,需先明确日志位置:
systemctl start my-golang-app启动),日志默认由systemd管理;lumberjack库)输出到文件(如/var/log/myapp.log),需直接访问文件;log包的日志会输出到终端(需通过重定向保存到文件)。若Golang应用作为systemd服务运行,可通过journalctl命令高效查询:
journalctl -u my-golang-service(替换为实际服务名);journalctl -u my-golang-service -f(类似tail -f);journalctl -u my-golang-service --since "2025-09-01" --until "2025-09-24";journalctl -u my-golang-service -n 100;journalctl -u my-golang-service > myapp.log(便于后续分析)。若Golang应用将日志写入文件(如通过log.SetOutput或lumberjack配置),可使用以下命令:
tail -f /path/to/your/app.log(如/var/log/myapp.log);tail -n 50 /path/to/your/app.log(查看最后50行);less /path/to/your/app.log(支持上下翻页,按q退出);grep "error" /path/to/your/app.log(查找包含“error”的行)。日志文件可能包含大量信息,需通过文本处理工具提取关键内容:
grep "error" /path/to/your/app.log(查找错误日志);grep "2025-09-24" /path/to/your/app.log(查找当天的日志);awk '/error/ {count++} END {print count}' /path/to/your/app.log(统计“error”出现的次数);awk '{print $1, $2, $3}' /path/to/your/app.log(提取每行的前3个字段,如时间戳、日志级别、消息)。为避免日志文件过大,建议使用logrotate工具自动切割、压缩和删除旧日志:
/etc/logrotate.d/目录下创建文件(如myapp),内容如下:/var/log/myapp.log {
    daily          # 每天切割一次
    rotate 7       # 保留最近7天的日志
    compress       # 压缩旧日志(如.gz格式)
    missingok      # 若日志文件不存在也不报错
    notifempty     # 若日志为空则不切割
}
logrotate -f /etc/logrotate.d/myapp(强制立即轮转)。若使用第三方日志库(如logrus、zap),建议输出JSON格式的结构化日志(便于后续分析):
logger := logrus.New()
logger.SetFormatter(&logrus.JSONFormatter{})
logger.SetOutput(&lumberjack.Logger{
    Filename:   "/var/log/myapp.json.log",
    MaxSize:    10, // MB
    MaxBackups: 3,
    MaxAge:     28, // 天
    Compress:   true,
})
logger.Info("This is a structured log", logrus.Fields{"user": "admin", "action": "login"})
goaccess工具快速解析访问日志(如goaccess /var/log/myapp.access.log --log-format=JSON -o report.html)。