在 Debian 上用 Go 写的程序,日志“实时看”通常分 程序正在前台运行 和 日志写入文件 两种情况。下面按常见场景给你总结。
如果你是直接在 Debian 上运行:
go run main.go
# 或
./yourapp
那么日志本来就实时打印在终端,直接看即可。
tail -f 实时查看假设日志文件是:
/var/log/yourapp.log
实时查看:
tail -f /var/log/yourapp.log
只看最后 100 行并实时:
tail -n 100 -f /var/log/yourapp.log
✅ 最常用、最简单
如果你用了 lumberjack:
&lumberjack.Logger{
Filename: "/var/log/yourapp.log",
MaxSize: 100,
MaxBackups: 7,
Compress: true,
}
日志可能是:
yourapp.log
yourapp-2026-01-21.log
实时看当前日志:
tail -F /var/log/yourapp.log
⚠️ 注意:
-f:跟踪文件描述符-F:文件被 rename 后还能继续跟踪(更适合日志切割)journalctl -u yourapp.service -f
从启动开始:
journalctl -u yourapp.service -f -n 200
✅ 不需要自己写日志文件
✅ 自动轮转、权限安全
tail -f yourapp.log | jq
没有 jq:
sudo apt install jq
tail -f yourapp.log | grep ERROR
Go 中建议日志带级别:
log.Println("ERROR: db connect failed")
✅ 最佳实践
stdoutjournalctl -u yourapp -f
或
tail -F❌ 用了 log.SetOutput(os.Stdout) 但服务被 nohup 吞了
✅ 用 systemd 或重定向文件
❌ tail -f 看不到日志
✅ 确认程序真的在写这个文件
如果你愿意,可以告诉我:
我可以给你最合适的一条命令。