在检索前,需明确Golang应用的日志存储路径。常见场景如下:
my-golang-app.service),日志由journalctl统一管理,无需直接访问文件。/var/log/myapp/app.log、/home/username/myapp/logs.log),需通过文件路径检索。journalctl查看)。# 搜索应用名相关的日志文件(如"myapp")
sudo find / -name "*myapp*.log" 2>/dev/null
若应用以systemd服务运行,journalctl是最优选择,支持时间过滤、服务筛选、关键词搜索,且日志集中管理。
journalctlmy-golang-app为服务名):journalctl -u my-golang-app.service
journalctl -b
journalctl --since "2025-09-28 10:00:00" --until "2025-09-28 12:00:00"
journalctl -u my-golang-app.service | grep -i "error"
tail -f):journalctl -u my-golang-app.service -f
若应用使用logrus或zap等库设置了日志级别(如info、error),可通过journalctl的--priority参数过滤(需应用将级别写入日志元数据):
journalctl -u my-golang-app.service --priority=err # 仅显示错误日志
若日志存储在文件中,可使用grep、less、tail等命令高效检索。
grep "error" /var/log/myapp/app.log
grep -i "error" /var/log/myapp/app.log
grep -C 2 "error" /var/log/myapp/app.log
q退出):less /var/log/myapp/app.log
tail -f /var/log/myapp/app.log
tail -n 100 /var/log/myapp/app.log
若日志文件包含时间戳(如2025-09-28 10:00:00),可通过awk或grep过滤:
awk '/2025-09-28 10:[0-5][0-9]:[0-5][0-9]/' /var/log/myapp/app.log
若应用使用logrus或zap等结构化日志库(推荐),可将日志输出为JSON格式,便于后续用jq或日志分析工具(如Loki、ELK)检索。
package main
import (
"github.com/sirupsen/logrus"
"os"
)
func main() {
logger := logrus.New()
logger.SetOutput(os.Stdout)
logger.SetFormatter(&logrus.JSONFormatter{}) // 输出JSON格式
logger.WithFields(logrus.Fields{
"level": "error",
"service": "my-golang-app",
"error": "database connection failed",
}).Error("Failed to connect to database")
}
日志输出示例:
{"level":"error","service":"my-golang-app","error":"database connection failed","msg":"Failed to connect to database","time":"2025-09-28T10:00:00Z"}
# 查找error级别的日志
grep "error" /var/log/myapp/app.log | jq '.level == "error"'
# 查找特定服务的error日志
grep "error" /var/log/myapp/app.log | jq 'select(.service == "my-golang-app" and .level == "error")'
若应用集成Loki(轻量级日志聚合系统),可通过LogQL(Loki的查询语言)实现高性能、可视化检索,适合大规模日志分析。
参考Loki官方文档部署,并配置Promtail(Loki的日志收集器)收集Golang应用日志(如/var/log/myapp/*.log)。
{app="my-golang-app"} |= "error" |~ ".*error.*"
sum by (level) (rate({app="my-golang-app"} |= "error" [5m]))
sum by (client_ip) (rate({app="my-golang-app"} |= "error" [5m])) > 10
通过Grafana连接Loki,创建仪表盘展示日志趋势、错误分布等,提升检索效率。
LOG_LEVEL=info)控制日志级别,避免生产环境记录过多debug日志。logrotate工具定期压缩、删除旧日志,节省磁盘空间(参考man logrotate)。logrus或zap输出JSON格式日志,便于后续检索和分析。通过以上方法,可根据场景选择最适合的工具,高效检索Debian系统中的Golang日志。