在Linux系统中查询Golang日志的第一步是确定日志文件的存储位置。常见路径包括:
log包的日志会输出到标准输出(stdout);若使用os.Stdout重定向,需检查代码中log.SetOutput()的参数(如示例中的/var/log/myapp.log)。logrus、zap等库时,通常会在代码中通过logger.Out或log.SetOutput()指定文件路径(如JSON格式输出到/var/log/myapp.json)。systemd服务运行,日志可能通过StandardOutput=append:/var/log/yourapp.log配置写入系统日志(需检查服务单元文件)。使用tail -f命令实时监控日志文件的新增内容,适用于故障排查时的动态跟踪:
tail -f /path/to/your/logfile.log
按Ctrl+C停止实时查看。
通过grep命令筛选包含特定关键字的日志行,支持正则表达式和选项:
grep 'error' /path/to/your/logfile.log
grep -i 'error' /path/to/your/logfile.log
grep -v 'debug' /path/to/your/logfile.log
tail -f实时过滤:tail -f /path/to/your/logfile.log | grep 'error'
```。  
2025-10-15 14:30:00 ERROR something wrong:awk '/ERROR/ {print $1, $2, $3}' /path/to/your/logfile.log
sed '/debug/d' /path/to/your/logfile.log          # 删除debug行
sed -n '/2025-10-15 00:00:00/,/2025-10-15 23:59:59/p' /path/to/your/logfile.log  # 截取时间段
```。  
若Golang应用通过systemd运行(如部署为服务),可使用journalctl查看系统级日志:
sudo journalctl -u your_golang_app.service -f  # 实时查看指定服务的日志
sudo journalctl -u your_golang_app.service | grep 'error'  # 结合grep过滤
其中-u指定服务名,-f表示实时跟踪。
对于大规模或分布式系统,建议使用ELK Stack(Elasticsearch+Logstash+Kibana)、Graylog或Fluentd:
logrus、zap等库记录JSON格式日志(包含时间戳、级别、模块、消息等字段),便于后续通过工具解析和过滤(如jq命令处理JSON)。lumberjack库或logrotate工具自动切割、压缩旧日志,避免日志文件过大影响查询性能。例如,lumberjack配置:logger.SetOutput(&lumberjack.Logger{
    Filename:   "/var/log/myapp.log",
    MaxSize:    10,    // 单个文件最大10MB
    MaxBackups: 3,     // 保留3个备份
    MaxAge:     7,     // 保留7天
    Compress:   true,  // 压缩旧日志
})
```。